最新的Web開發教程
 

SQL外鍵約束


SQL外鍵約束

外鍵在一個表指向另一個表的主鍵。

讓我們舉例說明一個例子外鍵。 請看下面兩個表:

"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 77895 3
2 44678 3
3 22456 2
4 24562 1

請注意, "P_Id"列中的"Orders"表指向"P_Id"列中的"Persons"表。

"P_Id"列中的"Persons"表是主鍵"Persons"表。

"P_Id"列中的"Orders"表是一個外鍵"Orders"表。

外鍵約束是用來防止會破壞表之間的鏈接行為。

外鍵約束也可以防止被插入的外鍵列無效數據,因為它必須包含在它指向的表中的值之一。


SQL外鍵約束的CREATE TABLE

下面的SQL創建的外鍵"P_Id"欄時, "Orders"創建表:

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 / 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)
)

要允許外鍵約束命名和定義多個列外鍵約束,請使用下面的SQL語法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

SQL外鍵約束的ALTER TABLE

要在創建外鍵約束"P_Id"當列"Orders"已創建表,使用下面的SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

要允許外鍵約束命名和定義多個列外鍵約束,請使用下面的SQL語法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

要刪除一個外鍵約束

要刪除一個外鍵約束,使用下面的SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders