Maison > base de données > tutoriel mysql > Pourquoi AUTO_INCREMENT de MySQL ne se réinitialise-t-il pas après une restauration ?

Pourquoi AUTO_INCREMENT de MySQL ne se réinitialise-t-il pas après une restauration ?

Patricia Arquette
Libérer: 2024-12-22 16:31:10
original
135 Les gens l'ont consulté

Why Doesn't MySQL's AUTO_INCREMENT Reset After a Rollback?

Pourquoi MySQL AUTO_INCREMENT n'est pas affecté par les restaurations

Le champ AUTO_INCREMENT de MySQL conserve des valeurs uniques quel que soit l'état de la transaction. Ce comportement découle du scénario suivant :

Scénario :

  1. Le premier programme insère un enregistrement dans la table FOO, générant la valeur 557 pour son primaire auto-incrémenté clé.
  2. Le programme deux insère un enregistrement dans la table FOO, récupérant la valeur 558.
  3. Le programme 2 insère la valeur 558 dans la table BAR en tant que clé étrangère.
  4. Le programme 2 valide.
  5. Le programme 1 revient en arrière.

Problème :

Récupérer le La valeur 557 après une restauration crée plusieurs problèmes non résolus :

  • La décrémentation des valeurs de clé primaire dans FOO affecterait d'autres enregistrements avec des valeurs plus élevées.
  • La modification de BAR nécessiterait de supprimer la clé étrangère, ce qui pourrait impacter d'autres données.
  • Effacer le rapport imprimé du programme trois est pratiquement impossible.

Conséquences :

Pour cette raison, les numéros de séquence d'Oracle fonctionnent également indépendamment des transactions.

Solution de contournement :

Si le maintien des valeurs d'incrémentation automatique sans interruption est crucial, les restaurations transactionnelles ne peuvent pas être utilisées. Au lieu de cela, un indicateur de statut peut être ajouté aux enregistrements :

  • Lors de l'insertion initiale, définissez le statut sur "Incomplet".
  • Pendant une transaction, mettez à jour le statut sur "Terminé" lorsque les opérations réussissent.
  • Validez la transaction pour marquer l'enregistrement comme étant actif.
  • Si la transaction est annulée, l'enregistrement incomplet reste pendant à des fins d'audit.

Cette solution présente ses propres défis mais offre un moyen de conserver les pistes d'audit tout en évitant les écarts d'auto-incrémentation.

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