约束

  1. 非空约束: not null

    • 约束某字段不能为空
  2. 唯一约束: unique

    • 约束字段值是唯一的
  3. 主键约束: primary key (自增: auto_increment)

    • 主键是一张表的唯一表示,是非空唯一的,若需要自增,加上auto_increment
  4. 默认约束: default

    • 若某字段的值没有添加,则会默认指定的值
  5. 检查约束: check

    • 字段储存时必须要达到的条件
  6. 外键约束: foreign key

    • 用来让两张表的数据之间建立连接,从而保证数据的完整性和一致性的

例:

字段名字段含义字段类型约束条件约束关键字
idid唯一标示int主键并且自动增长primary key, auto_increment
name姓名varchar(10)不为空,并且唯一not null, unique
age年龄int大于0,并且小于120check
status状态char(1)如果没有指定该值,默认为1default
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