SQL FOREIGN KEY 约束
SQL 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。
“订单”表中的“PersonID”列是“订单”表中的FOREIGN KEY。
FOREIGN KEY约束用于防止会破坏表之间链接的操作。
FOREIGN KEY约束还可以防止将无效数据插入到外键列中,因为它必须是它指向的表中包含的值之一。
CREATE TABLE 上的 SQL FOREIGN KEY
创建“Orders”表时,以下SQL在“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)
);
ALTER TABLE 上的 SQL FOREIGN KEY
要在表创建“Orders”时在“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);
DROP 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;