MySQL基础复习回顾(三) 约束
目录
约束
什么是约束
- 为了保证数据的一致性和完整性,SQL规范以约 束的方式对表数据进行额外的条件限制。
- 约束是表级的强制规定
- 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通 过 ALTER TABLE 语句)
六大约束
- NOT NULL:非空,用于保证该字段的值不能为空 比如姓名、学号等
- DEFAULT:默认,用于保证该字段有默认值 比如性别
- PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空 比如学号、员工编号等
- UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空(允许多个空值) 比如座位号
- CHECK:检查约束【mysql中不支持】比如年龄、性别
- FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值 在从表添加外键约束,用于引用主表中某列的值 .比如学生表的专业编号,员工表的部门编号,员工表的工种编号
FOREIGN KEY 外键约束
- 外键约束是保证一个或两个表之间的参照完整性, 外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。
- 从表的外键值必须在主表中能找到或者为空。当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据。
- 还有一种就是级联删除子表数据。
- 注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列
- 同一个表可以有多个外键约束
主表
CREATE TABLE classes(
id INT,
NAME VARCHAR(20),
number INT,
PRIMARY KEY(NAME,number)
);
从表
CREATE TABLE student(
id INT AUTO_INCREMENT PRIMARY KEY,
classes_name VARCHAR(20),
classes_number INT,
FOREIGN KEY(classes_name,classes_number)
REFERENCES classes(NAME,number)
);
删除外键约束
ALTER TABLE emp
DROP FOREIGN KEY emp_dept_id_fk;
增加外键约束
ALTER TABLE emp
ADD [CONSTRAINT emp_dept_id_fk] FOREIGN KEY(dept_id) REFERENCES dept(dept_id);
– FOREIGN KEY: 在表级指定子表中的列
– REFERENCES: 标示在父表中的列
– ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
– ON DELETE SET NULL(级联置空): 子表中相应的列置空
CREATE TABLE student(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20),
classes_name VARCHAR(20),
classes_number INT,
/*表级别联合外键*/
FOREIGN KEY(classes_name, classes_number)
REFERENCES classes(NAME, number) ON DELETE CASCADE);
添加约束的时机
- 创建表时
- 修改表时
约束的添加分类
列级约束 只能作用在一个列上,六大约束语法上都支持,但外键约束没有效果
表级约束 以作用在多个列上,除了非空、默认,其他的都支持