Внешний ключ — это столбец или группа столбцов в таблице, которые ссылаются на первичный ключ другой таблицы.
Есть несколько действий, которые можно указать при обновлении или удалении первичного ключа. Но т.к. обновление используется редко, то сосредоточим наше внимание на удалении.
PostgreSQL поддерживает следующие действия:
- SET NULL
- SET DEFAULT
- RESTRICT
- NO ACTION
- CASCADE
NO ACTION
Не выполнять никаких действий. Но при попытке удаления вы получите ошибку ограничения violates foreign key constraint.
RESTRICT
Аналогично NO ACTION. Разница возникает только тогда, когда вы определяете ограничение внешнего ключа как DEFERRABLE в режиме INITIALLY DEFERRED или INITIALLY IMMEDIATE. IMMEDIATE ограничения проверяются в конце каждого оператора. DEFERRED ограничения не проверяются, пока транзакция не будет завершена. У каждого ограничения есть свой режим IMMEDIATE или DEFERRED.
SET NULL
Автоматически устанавливает значение NULL для столбцов внешнего ключа в ссылочных строках дочерней таблицы при удалении ссылочных строк в родительской таблице.
CASCADE
Автоматически удаляет все ссылающиеся строки в дочерней таблице при удалении ссылочных строк в родительской таблице. На практике чаще всего используется именно это действие.
SET DEFAULT
Устанавливает значение по умолчанию для столбца внешнего ключа ссылочных строк в дочерней таблице при удалении ссылочных строк из родительской таблицы.