📅  最后修改于: 2020-12-13 05:37:38             🧑  作者: Mango
外键不同于超级键,候选键或主键,因为外键是用于将两个表链接在一起或在两者之间建立连接的外键。
在本节中,我们将在此讨论外键,其使用,并查看一些示例,这些示例将有助于我们理解外键的工作和使用。我们还将看到它在数据库上的实际实现,即在表上创建和删除外键。
外键是用于通过主键将两个表链接在一起的外键。这意味着一个表的列指向另一表的主键属性。这进一步意味着,如果将任何属性设置为主键属性,则它将在另一个表中作为外键属性工作。但是,应该知道外键与主键无关。
使用外键只是在主键属性的帮助下将两个表的属性链接在一起。因此,它用于创建和维护两个关系之间的关系。
让我们讨论一个示例以了解外键的工作。
考虑两个表Student和Department具有各自的属性,如下表结构所示:
在表中,您可以看到一个常见的属性,即Stud_Id ,但是对于两个表它都有不同的键约束。在Student表中,字段Stud_Id是主键,因为它唯一地标识Student表的所有其他字段。另一方面,Stud_Id是Department表的外键属性,因为它充当Student表的主键属性。这意味着由于Stud_Id属性,Student和Department表都相互链接。
在下图中,您可以查看以下两个表之间的关系结构。
注意:DBMS中的引用完整性是根据外键的概念开发的。显然,主键是一个单独存在的键,外键始终引用其他表中的主键,其中包含主键的表被称为其他表的引用表或父表。有外键。
下面是使我们学习在表中创建外键的语法:
CREATE TABLE Department (
Dept_name varchar (120) NOT NULL,
Stud_Id int,
FOREIGN KEY (Stud_Id) REFERENCES Student (Stud_Id)
);
因此,通过这种方式,我们可以为MYSQL数据库中的表设置外键。
在为SQL或Oracle服务器中的表创建外键的情况下,以下语法将起作用:
CREATE TABLE Department (
Dept_name varchar (120) NOT NULL,
Stud_Id int FOREIGN KEY REFERENCES Student (Stud_Id)
);
以下是在ALTER TABLE上创建外键约束的语法:
ALTER TABLE Department
ADD FOREIGN KEY (Stud_Id) REFERENCES Student (Stud_Id);
为了删除外键,可以使用以下描述的语法:
ALTER TABLE Department
DROP FOREIGN KEY FK_StudentDepartment;
因此,通过这种方式,我们可以使用MYSQL数据库中的ALTER TABLE删除外键。
删除外键时,需要注意通过外键连接的表的完整性。如果您在一个表中进行更改并干扰了两个表的完整性,则由于两个表之间的连接不正确,它可能会显示某些错误。
有一些操作与外键表持有者采取的操作有关:
1)级联
当我们删除父表中的行(即持有主键的行)时,另一表中的相同列(即持有外键的行)也将被删除。因此,该动作称为Cascade 。
2)设置为NULL
这样的引用动作可以维护两个表的引用完整性。当我们操纵/删除父表/被引用表中的被引用行时,在子表(具有外键的表)中,该引用行的值设置为NULL。执行的这种引用动作称为Set NULL 。
3)设置默认
当父表的引用行中的值被更新或该行被删除,子表中的值被设置为该列的默认值时,将发生此类操作。
4)限制
这是限制条件,除非除非子表中的外键对其进行引用,否则无法修改或删除父表中被引用行的值。因此,这是外键的正常引用行为。
5)没有行动
它也是外键的限制约束,但仅在尝试修改或删除父表的引用行后才实现。
6)触发器
所有这些引用行为和其他引用行为基本上都实现为触发器,其中外键的行为与用户定义的触发器非常相似或几乎相似。但是,在某些情况下,有序的引用动作会被其等效的用户定义触发器替换,以确保正确执行触发器。