Maison >base de données >tutoriel mysql >Comment les contraintes différées et immédiates affectent-elles l'application des clés primaires et uniques dans les transactions de base de données ?

Comment les contraintes différées et immédiates affectent-elles l'application des clés primaires et uniques dans les transactions de base de données ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-06 09:02:44788parcourir

How Do Deferred and Immediate Constraints Affect Primary and Unique Key Enforcement in Database Transactions?

Contrainte définie DIFFÉRABLE INITIALEMENT IMMÉDIATE reste différée

Application des contraintes différées

Les contraintes clés primaires et uniques définies comme DIFFÉRÉES / DIFFÉRÉES et INITIALEMENT IMMEDIATE appliquent l'unicité à des moments précis pendant la transaction exécution.

État différé

1. Instructions de mise à jour modifiant plusieurs lignes :

Les instructions UPDATE modifiant plusieurs lignes impliquant des échanges de clés primaires réussissent même avec des contraintes INITIALEMENT IMMEDIATE, car la vérification des contraintes est différée jusqu'après l'instruction.

2. CTE de modification de données :

Les CTE de modification de données se comportent de la même manière, à l'exception des mises à jour conflictuelles, qui échouent en raison d'une violation de clé primaire non différée.

3. Plusieurs instructions UPDATE dans une transaction :

Sans SET CONSTRAINTS, plusieurs instructions UPDATE au sein d'une transaction qui violent des contraintes uniques échoueront, car la vérification est effectuée après chaque instruction.

État immédiat

  • Les contraintes définies avec INITIALEMENT IMMEDIATE ne sont appliquées qu'après chaque
  • INITALLY IMMEDIATE et SET CONSTRAINTS IMMEDIATE se comportent de manière identique.

Le report et l'implémentation de PostgreSQL

  • PostgreSQL applique des contraintes non différées après chaque mise à jour de ligne. , conduisant à des conflits potentiels.
  • Les contraintes DÉFERRABLES fournissent une solution de contournement pour cette implémentation défectueuse.

Résumé de l'application des contraintes

  • Les contraintes DEFERRABLE INITIALLY IMMEDIATE sont vérifiées après les instructions.
  • Les contraintes DEFERRABLE INITIALLY DIFFERE sont vérifiées après les transactions.
  • Les contraintes non différées sont vérifiées après chaque commande.

Remarque : Les contraintes UNIQUE et PRIMARY KEY sont traitées spécialement et les contraintes non différées sont vérifiées immédiatement après chaque modification de ligne.

Compatibilité avec SQL Standard

Pour obtenir un comportement conforme à la norme, les contraintes DIFFÉRABLES doivent être déclarées comme INITIALEMENT IMMÉDIATE, mais pas différé. Cela peut compromettre les performances par rapport à la vérification immédiate de l'unicité.

Contraintes de clé étrangère

Les contraintes DEFERRABLE ne peuvent pas être utilisées pour les références FOREIGN KEY, car les colonnes référencées doivent être des contraintes de clé unique ou primaire non différées.

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!

Déclaration:
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