数据库系统概念第六版记录 三

外码约束(Foreign Key Constraint)

外码(Foreign Key, FK)是关系数据库中的一个约束,它用于保证表之间的引用完整性。外码的值必须:

要么存在于被引用表的主键列中,要么为空(NULL)。

外码约束的定义
在 SQL 中,可以使用 FOREIGN KEY 语句来定义外码约束。例如:

CREATE TABLE instructor (
    ID INT PRIMARY KEY,
    name VARCHAR(50),
    dept_name VARCHAR(50),
    salary FLOAT,
    FOREIGN KEY (dept_name) REFERENCES department(dept_name)
);

在这个例子中:
dept_name 是 instructor 关系中的一个外码,它引用 department 关系的 dept_name。
department.dept_name 必须是 PRIMARY KEY 或者 UNIQUE(UNIQUE:值不能重复,即所有行的 dept_name 都必须是唯一的)这样 instructor 中的 dept_name 才不会引用不存在的部门。

外码约束的影响

外码约束在数据库操作中会影响 插入(INSERT)、删除(DELETE) 和 更新(UPDATE) 操作:

  1. 破坏外码约束的 INSERT
    如果 instructor 表中的 dept_name 是 FOREIGN KEY,那么插入时必须确保 department 表中已经存在该 dept_name。

错误示例(如果 Physics 还未存在于 department 表中):

INSERT INTO instructor (ID, name, dept_name, salary)
VALUES (101, 'Alice', 'Physics', 90000);

如果 department 关系中没有 Physics,则数据库会报错:

ERROR: insert or update on table "instructor" violates foreign key constraint

正确方法(先插入 department 数据):

INSERT INTO department (dept_name, building, budget)
VALUES ('Physics', 'Science Hall', 500000);

INSERT INTO instructor (ID, name, dept_name, salary)
VALUES (101, 'Alice', 'Physics', 90000);
  1. 破坏外码约束的 DELETE
    如果一个 dept_name 被 instructor 表引用,则不能直接删除该 department,否则会破坏外码约束。

错误示例:

DELETE FROM department WHERE dept_name = 'Physics';

如果 instructor 表中仍然有 dept_name = ‘Physics’ 的记录,就会报错:

ERROR: update or delete on table "department" violates foreign key constraint

解决方案:

删除 instructor 关联的记录:
DELETE FROM instructor WHERE dept_name = 'Physics';
DELETE FROM department WHERE dept_name = 'Physics';

使用 ON DELETE CASCADE 级联删除:
CREATE TABLE instructor (
    ID INT PRIMARY KEY,
    name VARCHAR(50),
    dept_name 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值