SQL Foreign Key

FOREIGN KEY - в одной таблице указывает на другой PRIMARY KEY.

Посмотрите на две следующие таблицы:

Есть таблица "Persons":

P_IdLastNameFirstNameAddressCity
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Есть таблица "Orders":

O_IdOrderNoP_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1

Заметим что колонка "P_Id" в таблице "Orders" указывает на "P_Id" в таблице "Persons".

Колонка  "P_Id" в таблице "Persons" является PRIMARY KEY.

Колонка  "P_Id" в таблице "Orders" является FOREIGN KEY.

FOREIGN KEY не позволяет вставлять неверные данные в колонку "P_Id" в таблице "Orders" и "Persons".

SQL FOREIGN KEY Ограничения при CREATE TABLE

Следующие SQL создает FOREIGN KEY в колонке "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)
)

Можно распределить ограничитель FOREIGN KEY на несколько столбцов, для этого используйте следующий синтаксис SQL:

MySQL / SQL Server / Oracle / MS Access:

1
2
3
4
5
6
7
8
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 FOREIGN KEY Ограничения при ALTER TABLE

Следующие SQL создает FOREIGN KEY в колонке "P_Id", когда таблица "Orders" уже создан:

MySQL / SQL Server / Oracle / MS Access:

1
2
3
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

Можно распределить ограничитель FOREIGN KEY на несколько столбцов, для этого используйте следующий синтаксис SQL:

MySQL / SQL Server / Oracle / MS Access:

1
2
3
4
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

Удаление FOREIGN KEY

Для удаления ограничителя FOREIGN KEY используйте следующий SQL:

MySQL:

1
2
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

1
2
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

Источник: dmitry.dn.ua