Ограничения внешнего ключа используются для поддержания Ссылочной целостности , которая является ограничением базы данных, которое гарантирует, что ссылки между данными действительно действительны и не повреждены (база данных должна не только хранить данные, но и обеспечивать их качество). Другими словами, они помогают обеспечить согласованность отношений между таблицами. Из Википедии:
Ссылочная целостность - это свойство данных, которое, когда
удовлетворен, требует каждого значения одного
атрибут (столбец) отношения
(таблица) существовать как значение другого
атрибут в другом (или том же)
отношение (таблица).
Менее формально и в отношениях
базы данных: для ссылочной целостности
держать любое поле в таблице, которая
объявленный внешний ключ может содержать
только значения из родительской таблицы
первичный ключ или ключ-кандидат. За
например, удаление записи, которая
содержит значение, на которое ссылается
внешний ключ в другой таблице будет
нарушать ссылочную целостность. Немного
системы управления реляционными базами данных
(RDBMS) может применять ссылочный
целостность, обычно либо путем удаления
строки внешнего ключа, а также
поддерживать целостность или возвращая
ошибка и не выполняет удаление.
Какой метод используется, может быть определено
ограничением ссылочной целостности
определено в словаре данных.
Пример базы данных, которая не имеет
принудительная ссылочная целостность. В
В этом примере есть внешний ключ
(artist_id) значение в таблице альбома
который ссылается на несуществующего художника
- другими словами, есть иностранный
значение ключа без соответствующего
значение первичного ключа в ссылке
Таблица. То, что произошло здесь, было
там был художник по имени
"Aerosmith", с номерами Artist_id "4",
который был удален из художника
Таблица. Тем не менее, альбом "Ешьте
Богатые »ссылаются на этого художника.
соблюдение ссылочной целостности, это
не было бы возможно.
Чтобы создать внешний ключ между двумя таблицами с MySQL, обе таблицы должны быть таблицами InnoDB (с типом таблицы MyISAM по умолчанию можно «определить» внешний ключ, но на самом деле это не так. Делать что-нибудь).