DBMS 中的外键17 Mar 2025 | 4 分钟阅读 外键与超级键、候选键或主键不同,因为外键用于链接两个表或创建它们之间的连接。 在本节中,我们将讨论外键、它的用途,并通过一些示例来帮助我们理解外键的工作原理和用途。我们还将看到它在数据库上的实际实现,即在表上创建和删除外键。 什么是外键外键是用于通过主键链接两个表的键。这意味着一个表的列指向另一个表的主键属性。这进一步意味着,如果任何属性被设置为主键属性,它将在另一个表中作为外键属性。但应该知道,外键与主键无关。 外键的用途外键的用途是通过主键属性链接两个表的属性。因此,它用于创建和维护两个关系之间的关系。 外键示例让我们通过一个例子来理解外键的工作原理。 考虑两个表 **Student** 和 **Department**,它们的属性如图所示 ![]() ![]() 在表中,你可以看到一个共同的属性,即 **Stud_Id**,但它对两个表有不同的键约束。在 Student 表中,Stud_Id 字段是 **主键**,因为它唯一标识了 Student 表的所有其他字段。另一方面,Stud_Id 是 Department 表的 **外键** 属性,因为它充当 Student 表的主键属性。这意味着 Student 表和 Department 表由于 Stud_Id 属性而相互链接。 在下面显示的图中,你可以看到两个表之间关系的结构。 ![]() 注意:DBMS 中的参照完整性源于外键的概念。很明显,主键是一个单独存在的键,而外键总是引用另一个表中的主键。包含主键的表称为被引用表或父表,而包含外键的表称为子表。创建外键约束在 CREATE TABLE 时下面是学习如何在表中创建外键的语法 这样,我们就可以在 MYSQL 数据库中为表设置外键了。 在 SQL 或 Oracle 服务器中为表创建外键的情况下,以下语法将起作用 在 ALTER TABLE 时以下是在 ALTER TABLE 上创建外键约束的语法 删除外键为了删除外键,可以使用下面描述的语法 这样,我们就可以在 MYSQL 数据库中使用 ALTER TABLE 删除外键了。 需要注意的点删除外键时,需要注意通过外键连接的表的完整性。如果在修改一个表时破坏了两个表的完整性,可能会因为两个表之间的连接不当而显示某些错误。 参照操作有一些操作与外键持有者采取的操作相关联 1) 级联 (Cascade) 当我们在父表(即拥有主键的表)中删除行时,另一个表(即拥有外键的表)中的相应列也会被删除。因此,该操作称为 **级联 (Cascade)**。 2) 设置为 NULL (Set NULL) 这种参照操作维护两个表的参照完整性。当我们在父表/被引用表中操作/删除被引用的行时,在子表(拥有外键的表)中,该引用行的值被设置为 NULL。这种执行的参照操作称为 **Set NULL**。 3) 设置默认值 (Set DEFAULT) 当父表中的被引用行值被更新或删除时,子表中的值将被设置为列的默认值。这时就会发生这种操作。 4) 限制 (Restrict) 这是限制约束,在子表中的外键不引用父表中的被引用行时,不能修改或删除父表中的被引用行。因此,这是外键的正常参照操作。 5) 无操作 (No Action) 这也是外键的限制约束,但它仅在尝试修改或删除父表中的被引用行之后才实现。 6) 触发器 (Triggers) 所有这些以及其他参照操作基本上都作为触发器实现,其中外键的操作与用户定义的触发器非常相似或几乎相似。然而,在某些情况下,有序的参照操作会由等效的用户定义触发器替换,以确保正确的触发器执行。 下一个主题DBMS 中的代理键 |
我们请求您订阅我们的新闻通讯以获取最新更新。