SQL 外鍵
SQL FOREIGN KEY 約束
一個表格中的 FOREIGN KEY 指向另一個表格中的 PRIMARY KEY。
讓我們透過一個實例來解釋外鍵。請看下面兩個表:
"Persons" 表:
#P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | #Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | #Storgt 20 | Stavanger |
"Orders" 表:
O_Id | #OrderNo | P_Id |
---|---|---|
# 1 |
請注意,"Orders" 表中的 "P_Id" 欄位指向 "Persons" 表中的 "P_Id" 欄位。
"Persons" 表中的 "P_Id" 欄位是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "P_Id" 欄位是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 約束用於預防破壞表之間連接的行為。
FOREIGN KEY 限制也能防止非法資料插入外鍵列,因為它必須是它所指向的那個表中的值之一。
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)
)
(
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 / MS Access:
#CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)