Некоторые способы контроля ссылочной целостности при использовании внешних ключей:
- Автоматическая проверка при добавлении записи. 1 Система проверяет, ссылаются ли внешние ключи в новой записи на существующие записи в связанных таблицах. 1 Если операция приведёт к появлению некорректных ссылок, она не выполняется — система возвращает ошибку. 1
- Проверка при редактировании записи. 1 Если изменяется первичный ключ и на запись имеются ссылки, то операция редактирования завершается с ошибкой. 1 Если изменяется какой-то из внешних ключей, хранящихся в записи, и после изменения внешний ключ будет ссылаться на несуществующую запись, то операция редактирования также завершается с ошибкой. 1
- Проверка при удалении записи. 1 Система проверяет, нет ли на запись ссылок. 1 Если ссылки имеются, то возможно несколько вариантов дальнейших действий: 1
- Запрет — удаление блокируется и возвращается ошибка. 1
- Каскадное удаление — в одной транзакции производится удаление данной записи и всех записей, ссылающихся на неё. 1 Если на удаляемые записи также есть ссылки и настройки также требуют удаления, то каскадное удаление продолжается дальше. 1
- Присвоение NULL — во все внешние ключи записей, ссылающихся на данную, записывается маркер NULL. 1 Если хотя бы для одной из ссылающихся записей это невозможно (например, если поле внешнего ключа описано как NOT NULL), то удаление запрещается. 1
Также для контроля ссылочной целостности при использовании внешних ключей используются каскадные ограничения целостности, которые определяют действия ядра СУБД, когда пользователь пытается удалить или обновить ключ, на который имеется точка внешних ключей. 3 Некоторые варианты каскадных действий: NO ACTION, CASCADE, SET NULL, SET DEFAULT. 34