外鍵是一個表的字段,不是本表的主鍵,但對應另一個表的主鍵。外鍵主要用來在兩個表的資料之間建立連接配接,可以是一列或者多列。一個表可以有一個或者多個外鍵。
外鍵對應的是參照完整性,一個表的外鍵可以為空值,若不為空,則外鍵的值必須等于另一個表中的主鍵的某個值。
讓我們通過一個執行個體來解釋外鍵。請看下面兩個表:
"Persons" 表:
P_Id | FirstName | Address | City | |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
"Orders" 表:
O_Id | OrderNo | |
---|---|---|
77895 | ||
44678 | ||
22456 | ||
4 | 24562 |
請注意,"Orders" 表中的 "P_Id" 列指向 "Persons" 表中的 "P_Id" 列。"Persons" 表中的 "P_Id" 列是 "Persons" 表中的 主鍵(PRIMARY KEY)。"Orders" 表中的 "P_Id" 列是 "Orders" 表中的 外鍵限制(FOREIGN KEY)。
外鍵限制(FOREIGN KEY) 主要作用是保持資料的一緻性、完整性。例如:”Orders”表中的字段”P_Id”值必須對應“Persons”表中字段”P_Id”的某一個值。
(1) CREATE TABLE 時的 SQL FOREIGN KEY 限制
下面的 SQL 在 "Orders" 表建立時在 "P_Id" 列上建立 FOREIGN KEY 限制:
MySQL:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
SQL Server / Oracle:
O_Id int NOT NULL PRIMARY KEY,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
如需命名 FOREIGN KEY 限制,并定義多個列的 FOREIGN KEY 限制,請使用下面的 SQL 文法:
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
(2) ALTER TABLE 時的 SQL FOREIGN KEY 限制
當 "Orders" 表已被建立時,如需在 "P_Id" 列建立 FOREIGN KEY 限制,請使用下面的 SQL:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
(3) 撤銷 FOREIGN KEY 限制
如需撤銷 FOREIGN KEY 限制,請使用下面的 SQL:
DROP FOREIGN KEY fk_PerOrders
DROP CONSTRAINT fk_PerOrders
資料來源:
SQL 限制(Constraints)
https://www.runoob.com/sql/sql-constraints.htmlSQL FOREIGN KEY 限制
https://www.runoob.com/sql/sql-foreignkey.html