首页 约束
文章
取消

约束

概述

1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
2.目的,保证数据库中数据的:

正确性:检查约束符合现实逻辑或自定义的逻辑
有效性:非空约束不为空、唯一约束不重复
完整性:外键约束主从一致,不会出现主表数据删除或修改从表数据却还保持原样

3.分类

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束(8.0.1版本后)保证字段值满足某一个条件CHECK
外键约束用来让两张图的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

4.使用方法:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

常用约束

约束条件关键字
主键PRIMARY KEY
自动增长AUTO_INCREMENT
不为空NOT NULL
唯一UNIQUE
逻辑条件CHECK
默认值DEFAULT

演示:

1
2
3
4
5
6
7
create table user(
    id int primary key auto_increment,
    name varchar(10) not null unique,
    age int check(age > 0 and age < 120),
    status char(1) default '1',
    gender char(1)
);

注意:
1.auto_increment是MySQL独有的关键词,代表主键自增
2.只有约束primary key标识的字段才是主键,虽然primary key同时有uniquenot null的效果,但不是说加了这两个约束的就是主键
3.check(exp),exp一般是条件表达式

外键约束

1.简介:添加外键的表被称为从表,被引用的表被称为主表
2.添加外键:

1
2
3
4
5
6
7
8
9
CREATE TABLE 表名(
    字段名 字段类型,
    ...,
    [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主表列名)
);
ALTER TABLE 从表名 ADD CONSTRAINT 外键名称(推荐命名格式:FK_从表名_从表字段名称) FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名);

-- 例子
alter table emp add constraint fk_emp_dept_id foreign key(dept_id) references dept(id);

3.删除外键:ALTER TABLE 表名 DROP FOREIGN KEY 外键名;

删除/更新行为

行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新(与RESTRICT一致)
RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新(与NO ACTION一致)
CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则也删除/更新外键在子表中的记录
SET NULL当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(要求该外键允许为null)
SET DEFAULT父表有变更时,子表将外键设为一个默认值(Innodb不支持)

更改删除/更新行为:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE 行为 ON DELETE 行为;
注意:
1.no action 是MySQL外键的默认行为,no action 和restrict效果等同
2.常用删除/更新行为有:RESTRICT和CASCADE

本文由作者按照 CC BY 4.0 进行授权