天天看點

資料庫必知詞彙:外鍵限制(FOREIGN KEY)

外鍵是一個表的字段,不是本表的主鍵,但對應另一個表的主鍵。外鍵主要用來在兩個表的資料之間建立連接配接,可以是一列或者多列。一個表可以有一個或者多個外鍵。

外鍵對應的是參照完整性,一個表的外鍵可以為空值,若不為空,則外鍵的值必須等于另一個表中的主鍵的某個值。

讓我們通過一個執行個體來解釋外鍵。請看下面兩個表:

"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.html

SQL FOREIGN KEY 限制

https://www.runoob.com/sql/sql-foreignkey.html