SQL FOREIGN KEY 約束
SQL 外部索引鍵約束
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 上的 SQL 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)
);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 a FOREIGN KEY Constraint (刪除 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;