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