Eu li sobre a palavra-chave SQL DEFERRABLE
em Database Systems - The Complete Book .
O último [NOT DEFERRABLE] é o padrão e significa que toda vez que uma instrução de modificação do banco de dados é executada, a restrição é verificada imediatamente depois, se a modificação puder violar a restrição de chave estrangeira.
No entanto, se declararmos uma restrição como DEFERRABLE , temos a opção de esperar até que uma transação seja concluída antes de verificar a restrição.
Seguimos a palavra-chave DEFERRABLE por INITIALLY DEFERRED ou INITIALLY IMMEDIATE . No primeiro caso, a verificação será adiada para pouco antes de cada confirmação de transação. Neste último caso, a verificação será feita imediatamente após cada declaração.
Como é NOT DEFERRABLE
diferente de DEFERRABLE INITIALLY IMMEDIATE
? Em ambos os casos, ao que parece, todas as restrições são verificadas após cada declaração individual.
DEFERRABLE
declara a intenção do designer de que adiar a restrição é uma ação válida ou necessária. Este não é o caso para a grande maioria das restrições de banco de dados e rotulagem de todos, poisDEFERRABLE
perderia essa distinção útil.