Ограничение 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: