- 非外键约束
- 外键约束
- 外键策略
表的完整性约束
为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,MySQL提供了一种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种机制就是完整性约束。MySQL中主要支持以下几种种完整性约束,如表所示。 其中Check约束是MySQL8中提供的支持。
约束条件 | 约束描述 |
---|---|
PRIMARY KEY | 主键约束,约束字段的值可唯一地标识对应的记录 |
NOT NULL | 非空约束,约束字段的值不能为空 |
UNIQUE | 唯一约束,约束字段的值是唯一的 |
CHECK | 检查约束,限制某个字段的取值范围,mysql8才有 |
DEFAULT | 默认值约束,约束字段的默认值 |
AUTO_INCREMENT | 自动增加约束,约束字段的值自动递增 |
FOREIGN KEY | 外键约束,约束表与表之间的关系 |
非外键约束
约束从作用上可以分为两类
- 表级约束:
可以约束表中任意一个或多个字段。与列定义相互独立,不包含在列定义中;与定义用‘,’分隔;必须指出要约束的列的名称;
1 | -- 删除表: |
- 列级约束:
包含在列定义中,直接跟在该列的其它定义之后 ,用空格分隔;不必指定列名;
1 | /* |
- 在创建表后添加约束
1 | -- 删除表: |
外键约束
外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。
外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束。被依赖的表我们通常称之为父表或者主表,设置外键约束的表称为子表或者从表。
1 | -- 外键约束 |
外键策略
以上无法删除班级2等操作,需使用外键策略
策略一:
no action 不允许操作
1 | -- 通过操作sql来完成:先把班级2的学生对应的班级 改为null 或者其他班级 |
策略二:
cascade 级联操作
1 | -- 操作主表的时候影响从表的外键信息:将班级表3班改为5班,那么学生表3班也会变为5班;删除班级也一样 |
策略三:
set null 置空操作
1 | -- 先删除之前的外键约束: |
- 策略2 的 级联操作 和 策略3 的 删除操作 可以混着使用:
cascade
&&set null
1 | alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno) on update cascade on delete set null ; |
应用场景
- 朋友圈删除,点赞。留言都删除 – 级联操作
- 解散班级,对应的学生 置为班级为null就可以了,– set null