目录
约束
主键约束:唯一且不为null,每一张表只能有一个主键约束
唯一约束:唯一,每张表可以有多个唯一约束
非空约束:不能为null
默认值约束:给列设置默认值
外键约束:子表某列数据来源主表某列的数据
检查约束(check(8.0.16版本之后)):限定值的范围
设置约束
方式一
表已经创建好了,以修改表的方式来添加约束,如果表中的数据违背约束,添加失败
推荐:方式二
创建表的时候,就设置约束
举例:
创建学生表:id(唯一 不能为空),name(非空),sex(默认值 男),age,email(唯一)
(1)在列声明后写
性别的默认值为男:
(2)另起一行写约束,非空,默认值不可以
班级表:id 主键,cname 班级名称 非空,loc 教室位置(唯一)
班级位置为唯一,故报错,无法添加:
删除约束
datagrip可以手动加约束或者修改约束,不通过命令行:
主键约束
表设计经验:
- 每张表都应该有一个主键
- 主键加在非业务数据上,主键不允许修改
自增列
自增列 默认开始值为:1,每次加1
不给id列赋值,默认值为1:
如果手动给自增列赋值,是否报错? 不报错 id:24 下一个自增列的值:25
组合主键, 联合主键
外键约束
外键约束: 对外键的一种约束, 外键的值只能来源于主表主键值,唯一键值
外键设计经验:
- 多对多的关系, 需要中间表存储外键
- 一对多,外键加在多的一方
- 一对一: 外键加在任何一方, 外键必须加唯一约束
主外键是构成表与表关联的唯一途径!
外键是另一张表的主键!例如员工表与部门表之间就存在关联关系,其中员工表中的部门编号字段就是外键,是相对部门表的外键。
我们来看一个例子:
左侧的emp表是员工表,里面存储员工的基本信息,包含员工的ID、姓名、年龄、职位、薪资、入职日期、上级主管ID、部门ID,在员工的信息中存储的是部门的ID dept_id,而这个部门的ID是关联的部门表dept的主键id,那emp表的dept_id就是外键,关联的是另一张表的主键。
外键: 一个列, 维护两张表的关系
举例:
班级表与学生表: 1: n 外键加在学生表: 班级id外键
给表添加外键约束
注意:
- 创建表顺序: 先主表(被引用表tb_class), 再子表(使用外键约束的表,tb_student)
- 删除表顺序: 先删除子表,再删除主表
- 在实际开发中, 一般很少使用外键约束, 外键有程序赋值