Le comportement incrémental des colonnes d'auto-incrémentation de SQL Server après l'annulation d'une transaction : pas de problème
Supposons qu'une transaction .NET insère des données dans une base de données SQL Server 2005 avec une clé primaire à incrémentation automatique. La méthode Rollback()
annule correctement l'opération d'insertion de ligne lorsqu'une erreur est rencontrée dans la transaction. Cependant, les insertions ultérieures dans la même table incrémentent la colonne d'auto-incrémentation comme si aucune restauration ne s'était produite, créant ainsi un espace dans la séquence.
Comprendre la fonctionnalité d'incrémentation automatique
Il est important de comprendre que la conception des nombres auto-incrémentés n'est pas transactionnelle. La raison de cette conception est qu'un blocage peut se produire si d'autres transactions doivent attendre de consommer ou d'annuler le nombre incrémenté avant de pouvoir continuer.
Pour illustrer cela, considérons le scénario suivant dans lequel l'utilisateur 1 et l'utilisateur 2 interagissent avec la table A en utilisant un champ à incrémentation automatique comme colonne ID :
<code>用户 1 ------------ begin transaction insert into A ... insert into B ... update C ... insert into D ... commit 用户 2 ----------- begin transaction insert into A ... insert into B ... commit</code>
Si la transaction de l'utilisateur 2 se produit après la transaction de l'utilisateur 1, même juste un peu plus tard, son opération d'insertion dans la table A sera obligée d'attendre la fin de la transaction complète de l'utilisateur 1, juste pour être sûr que la première fois, elle provient de la table A. Indique si le numéro d'incrémentation automatique inséré est utilisé.
Conclusion
Par conséquent, le comportement de la colonne auto-incrémentée qui continue de s'incrémenter après l'annulation de la transaction n'est pas une erreur, mais une stratégie délibérément conçue. Si des nombres incrémentiels séquentiels précis sont requis, d’autres mécanismes doivent être envisagés pour générer de telles valeurs.
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!