目录1. 什么是外键? 2. 外键的语法3. 外键的约束行为4. 多列外键5. 外键的限制与注意事项 6. 实际应用示例7. 常见问题8. 总结 1. 什么是外键? 定义:外键是数据库表中的一列(或一组列),用于建立两个表之间的关联关系。外键的值必须匹配另一个表的主键(Primary Key)或唯一约束(Unique Constraint)的值。
作用:
确保数据的引用完整性(Referential Integrity),防止无效数据插入。
维护表之间的逻辑关系(如“一对多”或“多对多”)。
2. 外键的语法
在创建表时定义外键:
CREATE TABLE 子表 (列1 数据类型,列2 数据类型,...
FOREIGN KEY (外键列) REFERENCES 父表(主键列)[ON DELETE 约束行为] [ON UPDATE 约束行为]);
在已有表中添加外键:
ALTER TABLE 子表ADD CONSTRAINT 约束名称FOREIGN KEY (外键列) REFERENCES 父表(主键列)[ON DELETE 约束行为] [ON UPDATE 约束行为];3. 外键的约束行为当父表的记录被删除或更新时,子表的外键如何处理?通过ON DELETE和ON UPDATE
指定:
约束行为说明CASCADE级联操作。父表删除/更新记录时,子表关联记录也被删除/更新。
SET NULL父表删除/更新记录时,子表的外键列设为 NULL(要求外键列允许 NULL)。
NO ACTION默认行为。阻止父表的删除/更新操作,如果子表存在关联记录。
RESTRICT类似NO ACTION,立即检查约束。
SET DEFAULT父表删除/更新记录时,子表的外键设为默认值(需定义默认值)。
4. 多列外键外键可以由多个列组成,需满足:子表和父表的列数、顺序、数据类型一致。
父表的列必须有唯一约束(如主键或唯一索引)。
示例
:
CREATE TABLE 订单详情 (订单ID INT,产品ID INT,数量 INT,PRIMARY KEY (订单ID, 产品ID),FOREIGN KEY (订单ID) REFERENCES 订单(订单ID),FOREIGN KEY (产品ID) REFERENCES 产品(产品ID));5. 外键的限制与注意事项 父表必须有主键或唯一约束。
外键列的数据类型必须与父表主键一致。
引擎支持:如 MySQL 的 InnoDB 支持外键,而 MyISAM 不支持。
性能影响:外键会增加数据操作的检查开销,但能提升数据一致性。
循环依赖:避免两个表互相引用。
6. 实际应用示例场景:学生表(students)和课程表(courses),通过选课表(enrollments)关联。
-- 父表:学生表CREATE TABLE students (student_id INT PRIMARY KEY,name VARCHAR(50));-- 父表:课程表CREATE TABLE courses (course_id INT PRIMARY KEY,course_name VARCHAR(50));-- 子表:选课表(含外键)
CREATE TABLE enrollments (student_id INT,course_id INT,enrollment_date DATE,FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE,FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE RESTRICT);插入数据
:
-- 插入学生和课程INSERT INTO students VALUES (1, 'Alice');INSERT INTO courses VALUES (101, 'Math');-- 合法插入:学生和课程存在INSERT INTO enrollments VALUES (1, 101, '2023-10-01');-- 非法插入:学生不存在,触发外键错误INSERT INTO enrollments VALUES (999, 101, '2023-10-01'); -- 报错!7. 常见问题外键必须指向主键吗?
不,可以指向父表的唯一约束(Unique Constraint)。
能否跨数据库引用?
通常不支持,外键需在同一数据库内。
外键是否允许 NULL?
如果外键列允许 NULL,则插入 NULL 是合法的(表示无关联)。
如何查看外键约束?
使用数据库工具或查询元数据(如 MySQL 的SHOW CREATE TABLE)。
8. 总结 外键的核心作用:维护数据的一致性和关联性。适用场景:需要强数据完整性的系统(如电商、金融)。慎用场景:高并发写入且对性能要求极高的系统(需权衡一致性与性能)。
到此这篇关于SQL 外键(Foreign Key)详细讲解的文章就介绍到这了,更多相关SQL 外键Foreign Key内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:MySQL外键约束(FOREIGN KEY)的具体使用MySQL数据库中外键(foreign key)用法详解MySQL报错cannot add foreign key constraint的问题解决方法MySQL外键约束(Foreign Key)案例详解MySQL 外键(FOREIGN KEY)用法案例详解MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法mysql外键(Foreign Key)介绍和创建外键的方法MySQL数据库添加外键的四种方式
