MsSql

关注公众号 jb51net

关闭
首页 > 数据库 > MsSql > SQL 外键Foreign Key

SQL 外键Foreign Key全解析

作者:不辉放弃

外键是数据库表中的一列(或一组列),用于​​建立两个表之间的关联关系​​,外键的值必须匹配另一个表的主键(Primary Key)或唯一约束(Unique Constraint)的值,这篇文章主要介绍了SQL 外键(Foreign Key)详细讲解,需要的朋友可以参考下

1. 什么是外键?​​ ​

​​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. 外键的限制与注意事项​​ ​

​​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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文