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