Heim > Datenbank > MySQL-Tutorial > Warum wird MySQLs AUTO_INCREMENT nach einem Rollback nicht zurückgesetzt?

Warum wird MySQLs AUTO_INCREMENT nach einem Rollback nicht zurückgesetzt?

Patricia Arquette
Freigeben: 2024-12-22 16:31:10
Original
136 Leute haben es durchsucht

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

Warum MySQL AUTO_INCREMENT nicht von Rollbacks betroffen ist

Das AUTO_INCREMENT-Feld von MySQL behält eindeutige Werte unabhängig vom Transaktionsstatus bei. Dieses Verhalten ergibt sich aus dem folgenden Szenario:

Szenario:

  1. Programm eins fügt einen Datensatz in die Tabelle FOO ein und generiert den Wert 557 für seine automatisch inkrementierte Primärdatei Schlüssel.
  2. Programm zwei fügt einen Datensatz in die Tabelle FOO ein und ruft den Wert ab 558.
  3. Programm zwei fügt den 558-Wert als Fremdschlüssel in die Tabelle BAR ein.
  4. Programm zwei führt Commits durch.
  5. Programm eins führt einen Rollback durch.

Problem:

Rückgewinnung des 557 Wert nach einem Rollback führt zu mehreren ungelösten Problemen:

  • Das Verringern von Primärschlüsselwerten in FOO würde sich auf andere Datensätze mit höheren Werten auswirken.
  • Eine Änderung von BAR würde das Entfernen des Fremdschlüssels erfordern, was Auswirkungen haben könnte andere Daten.
  • Das Löschen des gedruckten Berichts aus Programm drei ist praktisch unmöglich.

Folgen:

Aus diesem Grund funktionieren die Sequenznummern von Oracle auch unabhängig von Transaktionen.

Workaround:

Wenn die Aufrechterhaltung lückenloser Werte für die automatische Inkrementierung von entscheidender Bedeutung ist, können Transaktions-Rollbacks nicht verwendet werden. Stattdessen kann den Datensätzen ein Statusflag hinzugefügt werden:

  • Setzen Sie den Status beim ersten Einfügen auf „Unvollständig“.
  • Aktualisieren Sie den Status während einer Transaktion auf „Abgeschlossen“, wenn Vorgänge sind erfolgreich.
  • Übernehmen Sie die Transaktion, um den Datensatz als live zu markieren.
  • Wenn die Transaktion zurückgesetzt wird, bleibt der unvollständige Datensatz bestehen Auditing-Zwecke.

Diese Lösung bringt ihre eigenen Herausforderungen mit sich, bietet jedoch eine Möglichkeit, Audit-Trails beizubehalten und gleichzeitig Lücken bei der automatischen Inkrementierung zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum wird MySQLs AUTO_INCREMENT nach einem Rollback nicht zurückgesetzt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage