目录

SQL FOREIGN KEY 约束


SQL 外键约束

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

FOREIGN KEY是一个表中的一个字段(或字段集合),它引用PRIMARY KEY在另一张表格上。

具有外键的表称为子表,具有主键的表称为引用表或父表。

看下面两个表:

人员表

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

订单表

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

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

"Persons" 表中的 "PersonID" 列是PRIMARY KEY在"Persons" 表中。

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

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



创建表时的 SQL 外键

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

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 访问:

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 访问:

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 上的 SQL 外键

创建一个FOREIGN KEY当已创建 "Orders" 表时,对 "PersonID" 列进行约束,请使用以下 SQL:

MySQL / SQL Server / Oracle / MS 访问:

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

允许命名FOREIGN KEY约束,并定义一个 FOREIGN KEY对多列进行约束,使用以下 SQL 语法:

MySQL / SQL Server / Oracle / MS 访问:

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

删除外键约束

删除一个FOREIGN KEY约束,使用以下 SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

SQL Server / Oracle / MS 访问:

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;