# 约束

  1. 概念: 约束是作用于表中字段上的规则,用于限制在表中的数据。
  2. 目的:保证数据库中数据的正确、有效性和完整性。
  3. 分类:
约束 描述 关键字
非空约束 限制该字段的数据不能为 null not nulll
唯一约束 保证该字段的所有数据都是唯一、不重复的 unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段的值,则采用默认值 default
检查榆树(8.0.16版本之后) 保证字段值满足某一个条件 check
外键约束 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 foreign key

# 约束演示

-- 建表使用约束
create table Test (
  id int primary key auto_increment,
  name varchar(4) unique,
  status char(1) default '1'
) comment '测试';

-- 修改字段
alter table Test modify id int primary key auto_increment comment '唯一标识';

# 外键约束

  • 概念:外键用来让两张表的数据之间建立连接,从而保证数据的一致性与完整性。

  • 具有外键的表称为==子表==,被外键关联的称为==父表==

  • 语法:

    1. 添加外键
create table Test(
  -- ...
  constraint [外键名称] froeign key (外键字段名) references 主表 (主表列名)
);

alter table table_name add constraint (外键名称) foreign key (外键字段名称) references 主表(主表列名)
  1. 删除外键
alter table table_name drop foreign key 外键名称;
  1. 触发主表删除/更新行为
行为 说明
no action 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新
restrict 与 no action 一致
cascade 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录
set null 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(需要当前字段允许为null)
set default 父表有变更时,子表将外键列设置成一个默认的值
alter table table_name add constraint (外键名称) foreign key (外键字段名称) references 主表(主表列名) on update cascade on delete cascade;