Ich muss mehrere Einsätze in einer einzigen atomaren Transaktion durchführen. Zum Beispiel:MySQL-Transaktion Rätsel
Transaktion starten;
Einsatz ...
Einsatz ...
begehen;
Wenn MySQL jedoch einen Fehler feststellt, wird nur die bestimmte Anweisung abgebrochen, die den Fehler verursacht hat. Wenn beispielsweise in der zweiten insert-Anweisung ein Fehler auftritt, wird die Festschreibung weiterhin ausgeführt und die erste insert-Anweisung wird aufgezeichnet. Wenn also Fehler auftreten, ist eine MySQL-Transaktion nicht wirklich eine Transaktion. Um dieses Problem zu beheben, habe ich einen Fehlerbeendungshandler verwendet, bei dem ich die Transaktion zurücksetze. Jetzt wird die Transaktion stillgelegt, aber ich weiß nicht, was das Problem war.
So, hier ist das Rätsel für Sie:
Wie kann ich beide machen MySQL eine Transaktion abbrechen, wenn ein Fehler auftritt, und den Fehlercode weitergeben an den Anrufer?
Verwenden Sie einen Tabellentyp, der Transaktionen unterstützt (InnoDB)? MyISAM -Tabellen unterstützen keine Transaktionen (daher sind START, COMMIT und ROLLBACK keine Op-Anweisungen), was zu dem von Ihnen beschriebenen Verhalten führen kann. – Piskvor
Ja, ich verwende InnoDB. –
Wie führen Sie diese Anweisungen aus? Von einer bestimmten Programmiersprache API, eine gespeicherte Prozedur, etwas anderes? – nos