Maison > base de données > tutoriel mysql > Comment fonctionne la vérification de clé primaire DEFERRABLE de PostgreSQL ?

Comment fonctionne la vérification de clé primaire DEFERRABLE de PostgreSQL ?

Linda Hamilton
Libérer: 2025-01-06 09:16:39
original
399 Les gens l'ont consulté

How Does PostgreSQL's DEFERRABLE Primary Key Check Enforcement Work?

Application de la vérification des clés primaires DEFERRABLES

Le comportement d'une contrainte de clé primaire ou unique DEFERRABLE dépend de sa spécification. PostgreSQL considère les scénarios d'application suivants :

1. DEFERRABLE INITIALLY IMMEDIATE

Les contraintes avec DEFERRABLE INITIALLY IMMEDIATE sont appliquées après chaque instruction, et non après chaque mise à jour de ligne, comme on pourrait s'y attendre. Cela signifie que :

  • Dans votre exemple d'instruction UPDATE modifiant plusieurs lignes, la contrainte ne sera pas violée car toutes les mises à jour se produisent dans la même instruction.
  • De même, les CTE de modification de données fonctionneront comme prévu, sauf s'il existe une déclaration distincte qui violerait la contrainte.

2. DEFERRABLE INITIALLY DEFERRED

Les contraintes avec DEFERRABLE INITIALLY DEFERRED sont appliquées à la fin de la transaction, permettant ainsi plusieurs mises à jour au sein de la même transaction. Ceci est utile pour appliquer des contraintes sur plusieurs instructions.

3. Contraintes non-différables

Les contraintes déclarées comme NON DIFFÉRABLES sont vérifiées après chaque mise à jour de ligne, ce qui les rend plus strictes. Cela peut conduire à des violations de contraintes même lorsque la contrainte serait satisfaite à la fin de la commande.

Perspective historique

Dans les versions antérieures de PostgreSQL, les contraintes non différées ont également été vérifiés après chaque mise à jour de ligne. Ce comportement a été considéré comme un bug puis corrigé dans PostgreSQL 9.1.

Implications pratiques

  • Pour un comportement conforme aux normes, utilisez des contraintes DEFERRABLE INITIALLY IMMEDIATE.
  • Si des contraintes FOREIGN KEY sont requises, les colonnes référencées doivent faire partie d'un contrainte de clé unique ou primaire non différée.
  • Les contraintes DÉFERRABLES INITIALEMENT DIFFÉRÉES peuvent améliorer les performances en permettant plusieurs mises à jour en une seule transaction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal