Отсрочка ограничений

Ограничения могут иметь следующие атрибуты:

  • DEFERRABLE или NOT DEFERRABLE,

  • INITIALLY DEFERRED или INITIALLY IMMEDIATE.

2-15-4751422

Проверку ограничений на достоверность можно отложить до окончания транзакции. Ограничение откладывается на более поздний срок, если система определяет, что оно выполняется только при фиксации транзакции. Если отсроченное ограничение нарушается, тогда фиксация транзакции приведет к ее откату. Если ограничение является немедленным (не откладывается), тогда оно проверяется в конце каждой инструкции. Когда ограничение нарушается, инструкция незамедлительно откатывается назад.

Если ограничение вызывает действие (например, DELETE CASCADE), это действие всегда выполняется как часть инструкции, вызвавшей его, независимо от того, является ограничение отложенным или немедленным. Используйте инструкцию SET CONSTRAINTS, чтобы указать для определенной транзакции, проверяется ли допускающее задержку ограничение после каждой инструкции DML или после фиксации транзакции. Чтобы создать ограничения с возможностью задержки, необходимо задать для этого ограничения неуникальный индекс.

Ограничения можно определить как допускающие задержку (deferrable) или не допускающие ее (not deferrable), а также как первоначально отложенные (initially deferred) или как первоначально немедленные (initially immediate). Для каждого ограничения эти атрибуты могут быть разными.

Сценарий использования. В соответствии с политикой компании номер отдела 40 должен быть изменен на 45. Изменение столбца DEPARTMENT_ID оказывает влияние на сотрудников, назначенных в этот отдел. Поэтому первичный ключ и внешние ключи создаются с возможностью задержки и первоначально отложенными. Затем следует обновить сведения об отделе и сотрудниках, а на момент фиксации транзакции все строки необходимо проверить на достоверность.

Далее: Сведения о столбцах

Related Posts