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