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

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

Иностранный ключ одной таблицы ссылается на первичный ключ другой таблицы.

Давайте рассмотрим пример, чтобы объяснить иностранный ключ. Посмотрите на следующие две таблицы:

Таблица "Persons":

Id_P LastName FirstName Адрес Город
1 Эдамс Джон Улица Оксфорд Лондон
2 Буш Джордж Пятая Авеню Нью-Йорк
3 Картер Томас Улица Чанан Пекин

Таблица "Orders":

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1

Обратите внимание, что столбец "Id_P" в "Orders" ссылается на столбец "Id_P" в таблице "Persons".

Столбец "Id_P" в таблице "Persons" является 主键 в таблице "Persons".

Столбец "Id_P" в таблице "Orders" является иностранным ключом в таблице "Orders".

Условие иностранного ключа используется для предотвращения действий, разрушающих связь между таблицами.

Условие иностранного ключа также предотвращает ввод非法 данных в столбец иностранного ключа, так как он должен быть одним из значений в той таблице, на которую он ссылается.

Условие иностранного ключа при создании таблицы

Ниже приведен SQL, который создает FOREIGN KEY для столбца "Id_P" при создании таблицы "Orders":

MySQL:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
Иностранный ключ (Id_P) ссылается на Persons (Id_P)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)

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

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)

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

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

MySQL / SQL Server / Oracle / MS Access:

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

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

MySQL / SQL Server / Oracle / MS Access:

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

Аннулировать ограничение 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