赞
踩
外键:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
外键约束是用于建立两个表之间关系的一种约束,它定义了一个表中的列与另一个表中的列之间的关系。外键约束可以保证数据的完整性和一致性,确保表与表之间的关系得到正确维护
基本语法:
- -- 创建表时添加外键
- 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不支持) |
可以添加行为:
- -- 设置update和delete为cascade行为
- alter table 表名 add constraint 外键名称 foreign key (外键字段) references
- 主表名 (主表字段名) on update cascade on delete cascade;
假设有两个表: students
(学生表)和 courses
(课程表)。每个学生可以选择多门课程,因此我们希望通过外键约束来确保学生表中的 course_id
列与课程表中的 course_id
列保持一致。
1. 数据完整性:通过外键约束,我们可以确保学生表中的 course_id
列只引用了课程表中存在的有效 course_id
值。这样可以防止无效的或不存在的课程ID被插入到学生表中,保证数据的完整性。
2. 数据一致性:外键约束可以确保学生表中的 course_id
列与课程表中的 course_id
列保持一致。如果在课程表中更新或删除了某门课程的记录,外键约束会自动处理相关的学生表中的数据,以保持数据的一致性。
3. 数据查询和关联:使用外键约束可以简化数据查询和关联操作。通过外键关联,我们可以轻松地从学生表中获取与特定课程相关的学生信息,或者从课程表中获取与特定学生相关的课程信息。
1. 外键约束只能在InnoDB存储引擎下使用,因此需要确保表使用的是InnoDB引擎。
2. 外键列和主键列的数据类型和长度必须相同,否则无法建立外键约束。
3. 当删除或更新主表中的数据时,需要谨慎选择ON DELETE和ON UPDATE子句,以确保从表中的数据处理方式符合业务需求。
4. 外键约束可能会影响数据库的性能,特别是在大量数据插入或更新时。因此,在设计数据库时,需要权衡使用外键约束的必要性和性能影响。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。