SQL FOREIGN KEYОграничения
Ограничение FOREIGN KEY в SQL
FOREIGN KEY в одной таблице указывает на UNIQUE KEY (ключ с ограничением уникальности) в другой таблице.
Давайте объясним внешний ключ на примере. Посмотрите на следующие две таблицы:
Таблица "Persons":
| P_Id | LastName | FirstName | Адрес | Город |
|---|---|---|---|---|
| 1 | Hansen | Ola | Timoteivn 10 | Sandnes |
| 2 | Svendson | Tove | Borgvn 23 | Sandnes |
| 3 | Pettersen | Кари | Сторгт 20 | Ставангер |
Таблица "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 в таблице "Persons".
Столбец "P_Id" в таблице "Orders" является FOREIGN KEY в таблице "Orders".
Ограничение FOREIGN KEY используется для предотвращения действий, которые могли бы разрушить связи между таблицами.
Ограничение FOREIGN KEY также предотвращает вставку недопустимых данных в столбец внешнего ключа, поскольку значение в нем должно быть одним из значений в таблице, на которую он указывает.
Ограничение SQL FOREIGN KEY при CREATE TABLE
Следующий SQL создает ограничение FOREIGN KEY на столбце "P_Id" при создании таблицы "Orders":
MySQL:
(
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:
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
Чтобы задать имя ограничения FOREIGN KEY и определить ограничение FOREIGN KEY для нескольких столбцов, используйте следующий синтаксис SQL:
MySQL / SQL Server / Oracle / MS Access:
(
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)
)
Ограничение FOREIGN KEY в SQL при ALTER TABLE
Когда таблица "Orders" уже создана, чтобы создать ограничение FOREIGN KEY для столбца "P_Id", используйте следующий SQL:
MySQL / SQL Server / Oracle / MS Access:
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Чтобы задать имя ограничения FOREIGN KEY и определить ограничение FOREIGN KEY для нескольких столбцов, используйте следующий синтаксис SQL:
MySQL / SQL Server / Oracle / MS Access:
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Удаление ограничения FOREIGN KEY
Чтобы удалить ограничение FOREIGN KEY, используйте следующий SQL:
MySQL:
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
DROP CONSTRAINT fk_PerOrders
Другие расширения