J'ai lu ceci à propos du mot-clé SQL DEFERRABLE
dans Database Systems - The Complete Book .
Le dernier [NOT DEFERRABLE] est la valeur par défaut, et signifie que chaque fois qu'une instruction de modification de base de données est exécutée, la contrainte est vérifiée immédiatement après, si la modification peut violer la contrainte de clé étrangère.
Cependant, si nous déclarons qu'une contrainte est DEFERRABLE , nous avons la possibilité de la faire attendre qu'une transaction soit terminée avant de vérifier la contrainte.
Nous suivons le mot-clé DEFERRABLE soit INITIALLY DEFERRED soit INITIALLY IMMEDIATE . Dans le premier cas, la vérification sera reportée juste avant la validation de chaque transaction. Dans ce dernier cas, le contrôle sera effectué immédiatement après chaque relevé.
En quoi est-ce NOT DEFERRABLE
différent de DEFERRABLE INITIALLY IMMEDIATE
? Dans les deux cas, il semble que toutes les contraintes sont vérifiées après chaque déclaration individuelle.
DEFERRABLE
indique l'intention du concepteur selon laquelle le report de la contrainte est une action valable ou nécessaire. Ce n'est pas le cas pour la grande majorité des contraintes de base de données et l'étiquetage du tout carDEFERRABLE
cela perdrait cette distinction utile.