约束
非空约束: not null
- 约束某字段不能为空
唯一约束: unique
- 约束字段值是唯一的
主键约束: primary key (自增: auto_increment)
- 主键是一张表的唯一表示,是非空唯一的,若需要自增,加上auto_increment
默认约束: default
- 若某字段的值没有添加,则会默认指定的值
检查约束: check
- 字段储存时必须要达到的条件
外键约束: foreign key
- 用来让两张表的数据之间建立连接,从而保证数据的完整性和一致性的
例:
| 字段名 | 字段含义 | 字段类型 | 约束条件 | 约束关键字 |
|---|---|---|---|---|
| id | id唯一标示 | int | 主键并且自动增长 | primary key, auto_increment |
| name | 姓名 | varchar(10) | 不为空,并且唯一 | not null, unique |
| age | 年龄 | int | 大于0,并且小于120 | check |
| status | 状态 | char(1) | 如果没有指定该值,默认为1 | default |
| gender | 性别 | char(1) | 无 |
create table user (
id int primary key auto_increment,
name varchar(10) not null unique,
age int check(age > 0 && age <= 120),
status char(1) default '1',
gender char(1)
);
外键约束
create table 表名(
字段名 数据类型,
...
[constraint] [外键名称] foreign key (外键字段名) references 主表(主表列名)
);
添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名)
删除外键
alter table 表名 drop foreign key 外键名称;
- 删除和更新行为
| 行为 | 说明 |
|---|---|
| no action | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与restrict一致) |
| restrict | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与no action一致) |
| cascade | 当在父表中删除/更新对应记录时,首先检查该记录是否对应外键,如果有,则也删除/更新外键在子表中的记录。 |
| set null | 当在父表中删除对应记录时,首先检查该记录是否对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null) |
| set default | 父表有变更时,子表将外键列设置成一个默认的值(innodb不支持) |
创建外键关联时的例子
alter table 表名 add constraint 外键名称 foreigen key (外键字段) references 主表名(主表字段名) on update constraint on delete cascade