Я читал об этом ключевом слове SQL DEFERRABLE
в книге «Системы баз данных - Полная книга» .
Последнее [NOT DEFERRABLE] используется по умолчанию и означает, что каждый раз, когда выполняется оператор модификации базы данных, ограничение проверяется сразу же после этого, если модификация может нарушить ограничение внешнего ключа.
Однако, если мы объявляем ограничение как ОТЛОЖЕННОЕ , у нас есть возможность дождаться завершения транзакции перед проверкой ограничения.
Мы следуем за ключевым словом ОТЛОЖЕННЫЙ либо на НАЧАЛЬНО ОТЛОЖЕННЫЙ, либо на НАЧАЛЬНО НЕМЕДЛЕННО . В первом случае проверка будет отложена непосредственно перед фиксацией каждой транзакции. В последнем случае проверка будет производиться сразу после каждой выписки.
Чем NOT DEFERRABLE
отличается от DEFERRABLE INITIALLY IMMEDIATE
? В обоих случаях, похоже, любые ограничения проверяются после каждого отдельного утверждения.
DEFERRABLE
заявляет о намерении разработчика, что отсрочка ограничения является стоящим или необходимым действием. Это не относится к подавляющему большинству ограничений базы данных и маркировке всех, так какDEFERRABLE
это полезное различие потеряно.