SQL FOREIGN KEY Ограничение
Ограничение внешнего ключа SQL
Внешний ключ — это ключ, используемый для связывания двух таблиц друг с другом.
Внешний ключ — это поле (или набор полей) в одной таблице, ссылающееся на первичный ключ в другой таблице.
Таблица, содержащая внешний ключ, называется дочерней таблицей, а таблица, содержащая выбранный ключ, называется ссылочной или родительской таблицей.
Посмотрите на следующие две таблицы:
ТАблица "персоны":
PersonID | LastName | FirstName | Age |
---|---|---|---|
1 | Hansen | Ola | 30 |
2 | Svendson | Tove | 23 |
3 | Pettersen | Kari | 20 |
"Orders" table:
OrderID | OrderNumber | PersonID |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
Обратите внимание, что столбец "PersonID" в таблице "Orders" указывает на столбец "PersonID" в таблице "лица".
Столбец "PersonID" в таблице "лица" является первичным ключом в таблице "лица".
Столбец "PersonID" в таблице "Orders" является внешним ключом в таблице "Orders".
Ограничение внешнего ключа используется для предотвращения действий, которые уничтожают связи между таблицами.
Ограничение внешнего ключа также предотвращает вставку недопустимых данных в столбец внешнего ключа, поскольку он должен быть одним из значений, содержащихся в таблице, на которую он указывает.
SQL внешний ключ при создании таблицы
Следующий SQL создает внешний ключ в столбце "PersonID" при создании таблицы "Orders":
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)
);
Чтобы разрешить именование ограничения внешнего ключа и для определения ограничения внешнего ключа для нескольких столбцов, используйте следующий синтаксис 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 при изменении таблицы
Чтобы создать ограничение внешнего ключа в столбце "PersonID", когда таблица "Orders" уже создана, используйте следующий код SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
Чтобы разрешить именование ограничения внешнего ключа и для определения ограничения внешнего ключа для нескольких столбцов, используйте следующий синтаксис SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
Удалить ограничение внешнего ключа
Чтобы удалить ограничение внешнего ключа, используйте следующий SQL:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;