Das inkrementelle Verhalten der automatisch inkrementierenden Spalten von SQL Server nach dem Transaktions-Rollback: kein Problem
Angenommen, eine .NET-Transaktion fügt Daten mit einem automatisch inkrementierenden Primärschlüssel in eine SQL Server 2005-Datenbank ein. Die Rollback()
-Methode setzt den Zeileneinfügungsvorgang ordnungsgemäß zurück, wenn in der Transaktion ein Fehler auftritt. Nachfolgende Einfügungen in dieselbe Tabelle erhöhen jedoch die Auto-Inkrement-Spalte, als ob kein Rollback stattgefunden hätte, wodurch eine Lücke in der Sequenz entsteht.
Verstehen Sie die Funktion zur automatischen Inkrementierung
Es ist wichtig zu verstehen, dass das Design automatisch inkrementierender Zahlen nicht transaktional ist. Der Grund für dieses Design ist, dass es zu einer Blockierung kommen kann, wenn andere Transaktionen warten müssen, bis sie die erhöhte Zahl verbrauchen oder zurücksetzen, bevor sie fortfahren können.
Um dies zu veranschaulichen, betrachten Sie das folgende Szenario, in dem Benutzer 1 und Benutzer 2 mit Tabelle A interagieren und dabei ein Feld mit automatischer Inkrementierung als ID-Spalte verwenden:
<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>
Wenn die Transaktion von Benutzer 2 nach der Transaktion von Benutzer 1 erfolgt, auch nur etwas später, muss der Einfügevorgang in Tabelle A warten, bis die gesamte Transaktion von Benutzer 1 abgeschlossen ist, nur um sicherzugehen, dass sie beim ersten Mal aus Tabelle A kam Ob die eingefügte Auto-Inkrement-Nummer verwendet wird.
Fazit
Daher ist das Verhalten der automatisch inkrementierenden Spalte, die nach dem Rollback der Transaktion weiter inkrementiert wird, kein Fehler, sondern eine bewusst entwickelte Strategie. Wenn präzise aufeinanderfolgende Zahlen erforderlich sind, sollten andere Mechanismen zur Generierung solcher Werte in Betracht gezogen werden.
Das obige ist der detaillierte Inhalt vonWird die SQL Server-Identität (automatische Inkrementierung) nach einem Transaktions-Rollback weiter erhöht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!