趋近智
关系数据库中的表通常并非独立存在;一个表中的信息常常与另一个表中的信息直接相关。例如,Orders(订单)表需要知道每笔订单是由哪个顾客下的。为了建立和维护这些表之间的联系,关系数据库使用一种特定的机制:外键。
可以把外键看作连接两个表的桥梁。从技术上讲,外键是一个表中的列或一组列,其值必须与另一个表的主键列中的值相匹配。包含外键的表通常称为子表或引用表,而被其引用的主键所在的表则称为父表或被引用表。
外键的主要作用有两方面:
让我们再次使用常用示例:Customers(顾客)和 Orders(订单)。
假设我们有一个包含顾客详细信息的 Customers 表。每个顾客都需要一个唯一标识符,我们已经确定这是主键。我们称之为 CustomerID。
顾客表
+--------------+----------+-------+
| CustomerID | 姓名 | 邮箱 |
+--------------+----------+-------+
| 101 (PK) | Alice | a@... |
| 102 (PK) | Bob | b@... |
| 103 (PK) | Charlie | c@... |
+--------------+----------+-------+
(PK = 主键)
现在,我们有一个 Orders(订单)表来存储订单信息。每笔订单也需要一个唯一标识符(OrderID 作为主键)。重要的是,每笔订单都必须属于 Customers 表中的一位顾客。我们如何将订单与下订单的顾客联系起来呢?我们在 Orders 表中添加一个 CustomerID 列。Orders 表中的这个 CustomerID 列充当外键。
订单表
+------------+----------+----------------+
| OrderID | 产品 | CustomerID |
+------------+----------+----------------+
| 5001 (PK) | Laptop | 101 (FK) |
| 5002 (PK) | Keyboard | 102 (FK) |
| 5003 (PK) | Monitor | 101 (FK) |
| 5004 (PK) | Mouse | 103 (FK) |
+------------+----------+----------------+
(PK = 主键, FK = 外键,引用 Customers.CustomerID)
在 Orders 表中:
OrderID 是主键,唯一标识每笔订单。CustomerID 是外键。此列中的值(101、102、103)必须与 Customers 表中已有的 CustomerID 值相对应。这个外键创建了一个直接联系:订单 5001 属于顾客 101 (Alice),订单 5002 属于顾客 102 (Bob),依此类推。
这是该关系的一个图示:
Orders表中的CustomerID列是一个外键,它与Customers表中的CustomerID主键关联,从而建立了订单与顾客之间的联系。
外键的第二个作用是维护引用完整性。这是确保表之间关系一致性的重要原则。它主要指的是:
您不能向子表(Orders)添加记录,除非外键值(CustomerID)与父表(Customers)中现有的主键值相符。例如,如果 Customers 表中没有 CustomerID 为 104 的顾客,您就无法添加一个 CustomerID 为 104 的订单。数据库会拒绝此操作,以防止出现没有关联到有效顾客的“孤立”订单记录。
当尝试删除或更新父表(Customers)中被子表(Orders)记录引用的记录时,通常会应用一些规则。例如,数据库可能会阻止您从 Customers 表中删除顾客 101,因为订单 5001 和 5003 引用了该顾客。允许删除将导致这些订单指向一个不存在的顾客,从而破坏了关系的完整性。数据库系统提供了不同的方法来处理这些情况(例如限制删除、同时删除相关订单,或者将外键设为 NULL),但目标始终是保持数据一致性。
外键是维系关系数据库结构的纽带。它们使得您可以将复杂信息分解为逻辑、易于管理的表,同时维护它们之间有意义且稳定的联系。如果没有外键,确保相关表之间的数据一致性将非常困难且容易出错。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造