最新的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