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:

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 и определить ограничение FOREIGN KEY для нескольких столбцов, используйте следующий синтаксис 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)
)


Ограничение FOREIGN KEY в SQL при ALTER TABLE

Когда таблица "Orders" уже создана, чтобы создать ограничение FOREIGN KEY для столбца "P_Id", используйте следующий SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

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

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)


Удаление ограничения FOREIGN KEY

Чтобы удалить ограничение FOREIGN KEY, используйте следующий SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

Другие расширения