Ограничение внешнего ключа SQL


Оглавление

    Показать оглавление


Ограничение внешнего ключа SQL

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

FOREIGN KEY — это поле (или совокупность полей) в одной таблице, которое ссылается на ПЕРВИЧНЫЙ КЛЮЧ в другой таблице.

Таблица с внешним ключом называется дочерней таблицей, а таблица с первичным ключом, называется ссылочной или родительской таблицей.

Посмотрите на следующие две таблицы:

Таблица персон

PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20

Таблица заказов

OrderID OrderNumber PersonID
1 77895 3
2 44678 3
3 22456 2
4 24562 1

Обратите внимание, что столбец «PersonID» в таблице «Заказы» указывает на столбец «PersonID» в таблице «Лица».

Столбец «PersonID» в таблице «Лица» — это ПЕРВИЧНЫЙ КЛЮЧ в таблице «Лица».

Столбец «PersonID» в таблице «Заказы» представляет собой FOREIGN KEY в таблице «Заказы».

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



ВНЕШНИЙ КЛЮЧ SQL при CREATE TABLE

Следующий SQL создает FOREIGN KEY в столбце «PersonID» при создании таблицы «Заказы»:

MySQL:

CREATE TABLE Orders
(
   
OrderID int NOT NULL,
   
OrderNumber int NOT NULL,
   
PersonID int,
   
PRIMARY KEY (OrderID),
   
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

SQL Server/Oracle/MS Access:

CREATE TABLE Orders
(
   
OrderID int NOT NULL PRIMARY KEY,
   
OrderNumber int NOT NULL,
   
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);

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

MySQL/SQL Server/Oracle/MS Access:

CREATE TABLE Orders
(
   
OrderID int NOT NULL,
   
OrderNumber int NOT NULL,
   
PersonID int,
   
PRIMARY KEY (OrderID),
   
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
   
REFERENCES Persons(PersonID)
);

ВНЕШНИЙ КЛЮЧ SQL в ALTER TABLE

Чтобы создать ограничение FOREIGN KEY для столбца «PersonID», когда таблица «Заказы» уже создана, используйте следующий SQL:

MySQL/SQL Server/Oracle/MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);

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

MySQL/SQL Server/Oracle/MS Access:

ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);

УДАЛИТЬ ограничение FOREIGN KEY

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

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

SQL Server/Oracle/MS Access:

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;