Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Automatisches Inkrementieren von MySQL-Spalten bei TRANSACTION, COMMIT und ROLLBACK

Nein, Auto-Increment-Mechanismen müssen Arbeiten Sie außerhalb des Bereichs von Transaktionen, da ein anderer Benutzer möglicherweise in dieselbe Tabelle einfügt, bevor Sie Ihre Transaktion abschließen. Die Transaktion des anderen Benutzers muss in der Lage sein, den nächsten Wert zuzuweisen, bevor er weiß, ob Ihre Transaktion den gerade von Ihnen zugewiesenen Wert verwendet.

Zu Ihrem Kommentar:Wenn ich es deutlicher sagen darf, kann jede Änderung des Umfangs einer Transaktion rückgängig gemacht werden. Der Auto-Increment-Zähler wird nicht zurückgesetzt, er gehorcht also nicht der Atomizität von Transaktionen. Es gehorcht auch nicht der Isolation weil eine andere Transaktion den nächsten Wert erhält, obwohl Ihre Transaktion noch nicht festgeschrieben wurde.

Die Art und Weise, wie Auto-Increment funktioniert, bedeutet, dass manchmal, wenn Sie einige Zeilen einfügen und dann Ihre Transaktion zurücksetzen, die Werte, die Sie mit Auto-Increment zugewiesen haben, für immer verloren gehen!

Aber das ist in Ordnung. Primärschlüsselwerte müssen eindeutig, aber nicht fortlaufend sein. Mit anderen Worten, es handelt sich nicht um Zeilennummern, und Sie sollten sie nicht so verwenden. Sie sollten also nie Werte verringern müssen, die durch automatisches Inkrement erstellt wurden.