MySQL AUTO_INCREMENT : résoudre l'énigme du rollback
Dans MySQL, l'utilisation du champ AUTO_INCREMENT avec les transactions InnoDB présente un comportement particulier : les rollbacks n'affectent pas les valeurs AUTO_INCREMENT. Comprendre le raisonnement derrière ce choix de conception est crucial.
Considérez le scénario suivant :
Scénario :
- Le programme 1 commence une transaction et insère un enregistrement dans la table FOO, en attribuant la valeur AUTO_INCREMENT 557.
- Programme Deux également initie une transaction, insère un enregistrement dans FOO, obtenant 558.
- Le programme 2 procède à l'insertion d'un enregistrement dans la table BAR, faisant référence à la valeur 558 dans FOO.
- Le programme 2 valide sa transaction.
- Le programme trois génère un rapport basé sur la table FOO, y compris l'enregistrement avec la valeur 558.
- Program One annule finalement sa transaction.
Annulations et AUTO_INCREMENT :
Les systèmes de base de données n'annulent généralement pas les valeurs AUTO_INCREMENT car des implications potentielles :
-
Données Intégrité : Si la valeur 557 était décrémentée lors de la restauration, les valeurs des autres enregistrements avec des clés supérieures à 557 deviendraient invalides.
-
Contraintes de clé étrangère : La référence à 558 dans le tableau BAR serait orphelin si l'enregistrement 558 dans FOO était supprimé.
-
Incohérences du rapport : Le rapport généré par le programme trois devra être corrigé pour exclure l'enregistrement annulé avec la valeur 557.
Solutions de contournement et alternatives :
Bien que le champ AUTO_INCREMENT ne puisse pas être annulé, il existe des alternatives solutions pour répondre à des exigences spécifiques :
-
Enregistrements incomplets : À des fins d'audit, envisagez de conserver un indicateur d'état pour les enregistrements. Les enregistrements marqués comme « Incomplets » lors de leur création peuvent être annulés sans affecter les valeurs AUTO_INCREMENT, fournissant ainsi une piste d'audit.
La mise en œuvre de ces solutions de contournement nécessite un examen attentif de l'intégrité des données, des performances et des besoins spécifiques de l'entreprise.
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!