4-约束
1.概述
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性。
分类:
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
2. 约束演示
案例需求: 根据需求,完成表结构的创建。需求如下:
对应的建表语句为:
1 | mysql> CREATE TABLE tb_user( |
展示:
1 | mysql> desc tb_user; |
在为字段添加约束时,我们只需要在字段之后加上约束的关键字即可,需要关注其语法。我们执行上面 的 SQL 把表结构创建完成,然后接下来,就可以通过一组数据进行测试,从而验证一下,约束是否可以 生效
1 | insert into tb_user(name,age,status,gender) values ('Tom1',19,'1','男'), |
上面,我们是通过编写 SQL 语句的形式来完成约束的指定,那加入我们是通过图形化界面来创建表结构 时,又该如何来指定约束呢? 只需要在创建表的时候,根据我们的需要选择对应的约束即可。
3.外键约束
3.1 介绍
外键:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
我们来看一个例子:
左侧的 emp 表是员工表,里面存储员工的基本信息,包含员工的 ID、姓名、年龄、职位、薪资、入职日 期、上级主管 ID、部门 ID,在员工的信息中存储的是部门的 ID dept_id,而这个部门的 ID 是关联的 部门表 dept 的主键 id,那 emp 表的 dept_id 就是外键,关联的是另一张表的主键。
注意:目前上述两张表,只是在逻辑上存在这样一层关系;在数据库层面,并未建立外键关联, 所以是无法保证数据的一致性和完整性的。
没有数据库外键关联的情况下,能够保证一致性和完整性呢,我们来测试一下。
准备数据
1 | create table dept( |
结果,我们看到删除成功,而删除成功之后,部门表不存在 id 为 1 的部门,而在 emp 表中还有很多的员 工,关联的为 id 为 1 的部门,此时就出现了数据的不完整性。 而要想解决这个问题就得通过数据库的 外键约束。
3.2 语法
1. 添加外键
语法:
1 | CREATE TABLE 表名( |
1 | ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) |
案例:
为 emp 表的 dept_id 字段添加外键约束,关联 dept 表的主键 id。
语法:
1 | alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id); |
结果显示:
添加了外键约束之后,我们再到 dept 表(父表)删除 id 为 1 的记录,然后看一下会发生什么现象。 此时 将会报错,不能删除或更新父表记录,因为存在外键约束。
2. 删除外键
案例:
删除 emp 表的外键 fk_emp_dept_id。
语法:
1 | alter table emp drop foreign key fk_emp_id; |
执行成功
3.3 删除/更新行为
添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。
具体的删除/更新行 为有以下几种:
具体语法为:
1 | ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES |







