什么是外键及其作用? SQL 中的外键是一个表中的一列或一组列,用于建立与另一个表的主键之间的关系。其主要目的是强制执行参照完整性,确保表之间的数据关系保持有效。例如,考虑一个 orders
(订单)表和一个 customers
(客户)表。orders
表中的 customer_id
可以是一个外键,引用 customers
表中的 customer_id
(主键)。这确保每个订单都链接到一个有效的客户。没有外键,您可能会意外地为不存在的客户创建订单,导致数据不一致或成为“孤立”数据。外键通过要求外键列中的值必须存在于被引用表中来防止此类问题。
外键如何强制执行完整性 外键在插入、更新或删除数据时强制执行规则。例如,如果您尝试在 orders
表中插入一行,其中 customer_id
在 customers
表中不存在,数据库将拒绝该操作。类似地,删除被订单引用的客户会违反完整性,除非进行适当处理。SQL 允许定义诸如 ON DELETE CASCADE
之类的操作来自动化处理这些场景。例如,ON DELETE CASCADE
确保删除一个客户时也会删除他们的所有订单。其他选项包括 SET NULL
(如果引用的行被删除,则将外键设置为 NULL
)或 RESTRICT
(如果存在依赖行,则阻止删除)。这些规则无需手动检查即可维护数据一致性。
实现和实际示例 要创建外键,您可以在表创建时定义它,或者通过 ALTER TABLE
。示例如下:
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
ON DELETE CASCADE
);
这会将 orders.customer_id
链接到 customers.customer_id
并级联删除。外键还可以引用唯一约束(不仅仅是主键),并涉及复合键(例如,引用多个列)。在表创建后添加外键使用 ALTER TABLE orders ADD CONSTRAINT ...
。建议为外键列创建索引,以加快连接操作和约束检查。通过清晰定义关系,外键简化了查询逻辑,并减少了依赖于相互关联数据的应用程序中的错误。