Последние учебники веб-разработки
 

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 создает 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)
)

Чтобы разрешить именование внешнего ключа ограничения, а также для определения ограничений внешнего ключа на несколько столбцов, используйте следующий синтаксис 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