概述

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

注意:约束是作用于表中字段上的,可以在创建表或修改表时添加约束

演示

根据表,完成表的创建

字段名 字段含义 字段类型 约束条件
id ID唯一标识 Int 主键,并且自动增长
name 姓名 varchar(10) 不为空,并且唯一
age 年龄 int 大于0,并且小于等于120
status 状态 char(1) 如果没有指定该值,默认为1
gender 性别 char(1)

建表:

1
2
3
4
5
6
7
8
9
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)
) comment '用户表';

insert into user (id, name, age, status, gender) values (1, 'yi', '18', '1', '女');

外键约束

  1. 概念:
    外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
    mysql-基础-约束

    注意:目前上述的两张表,在数据库层面,并未建立关联,所有时无法保证数据的一致性和完整性。

  2. 语法:

  • 添加外键:(constraint-约束 ,references-关联)
1
2
3
§ CREATE TABLE 表名(字段名 数据类型, … [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名)REFERENCES 主表(主表列名));

§ ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名)REFERENCES 主表(主表列名);
  • 删除外键:
1
ALTER TABLE 表名 DROP FOREIGN KEY (外键字段名); 
  • 外键更新和删除行为:
    行为 说明
    NO ACTION 当在父表中删除/更新对应记渌时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与RESTRICT—致)
    RESTRICT 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与NO ACTION一致〕
    CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录
    SET NULL 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)。
    SET DEFAULT 父表有变更时,子表将外键列设置成一个默认的值(innodb引擎不支持)
    语法:
1
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段) REFERENCES 主表名〔主表字段名〕ON UPDATE CASCADE ON DELETE CASCADE;