MySQL FOREIGN KEY 约束

MySQL FOREIGN KEY 约束

FOREIGN KEY(外键)约束用于预防破坏表之间链接的动作。

FOREIGN KEY是一个表中的字段(或字段集合),它指向另一个表的 PRIMARY 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" 表的 PRIMARY KEY

"Orders" 表中的 "PersonID" 列是 "Orders" 表的FOREIGN KEY

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

在 CREATE TABLE 时创建 FOREIGN KEY

以下 SQL 在创建 "Orders" 表时在 "PersonID" 列上创建了一个 FOREIGN KEY

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

要允许为 FOREIGN KEY 约束命名,以及在多个列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:

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)
);

在 ALTER TABLE 时创建 FOREIGN KEY

如果 "Orders" 表已经创建,要在 "PersonID" 列上创建 FOREIGN KEY 约束,请使用以下 SQL:

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

要允许为 FOREIGN KEY 约束命名,以及在多个列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:

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

删除 FOREIGN KEY 约束

要删除 FOREIGN KEY 约束,请使用以下 SQL:

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;