SQL Foreign Key

创建于 2024-12-02 / 49
字体: [默认] [大] [更大]

SQL FOREIGN KEY 约束

FOREIGN KEY 外键是用于将两个表链接在一起的键。

FOREIGN KEY 外键是一个表中引用另一个表中主键的字段(或字段集合)。

包含外键的表称为子表,包含候选键的表称为引用表或父表。

请看下面两个表:

"Persons" 表:

PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20

"Orders" 表:

OrderID OrderNumber PersonID
1 77895 3
2 44678 3
3 22456 2
4 24562 1

请注意,"Orders" 表中的 "PersonID" 列指向 "Persons" 表中的 "PersonID" 列。

"Persons" 表中的 "PersonID" 列是 "Persons" 表中的主键。

"Orders" 表中的 "PersonID" 列是 "Orders" 表中的外键。

FOREIGN KEY 外键约束用于防止破坏表之间链接的操作。

FOREIGN KEY 外键约束还防止将无效数据插入外键列,因为它必须是它所指向的表中包含的值之一。


Advertisement

-->

创建表时的 FOREIGN KEY 约束

下面的 SQL 在 "Orders" 表创建时在 "PersonID" 列创建 FOREIGN KEY 外键约束:

MySQL:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

SQL Server / Oracle / MS Access:

CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);

如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
    REFERENCES Persons(PersonID)
);

修改表时的 FOREIGN KEY 约束

如果在表已存在的情况下为 "PersonID" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

撤销 FOREIGN KEY 约束

如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;

0 人点赞过