2017-10-29 1 views
0

Ich verwende InnoDB 5.6.35, und ich habe eine Frage bezüglich der richtigen Art, MySQL-Transaktionen zu implementieren. Wenn ich Folgendes implementiere, sende es an MySQL in einer Anweisung:MySQL-Transaktionsimplementierung

START TRANSACTION;

SQL-Anweisung 1; SQL-Anweisung 2; ... COMMIT;

Frage: Gibt MySQL das Rollback automatisch aus, wenn eine der SQL-Anweisungen fehlschlägt? Das Verhalten, das ich gesehen habe, ist, dass es so aussieht, als ob MySQL nicht mit den obigen Anweisungen festlegt, wenn es eine fehlgeschlagene Operation findet (selbst Rollback wird in meinem Programm nicht aufgerufen), aber ich bin nach dem Lesen einiger Postings nicht sicher. Muss ich die Codes wie von anderen vorgeschlagen in eine gespeicherte Prozedur einfügen und "Rollback" explizit in meinem Code aufrufen?

Kann mir jemand helfen, dies zu klären?

Antwort

0

https://dev.mysql.com/doc/refman/5.5/en/innodb-error-handling.html Nur in einigen Fällen Rollback nur die Anweisung, die fehlgeschlagen ist.

  • Wenn Sie in einem Tabellenbereich aus Dateibereich laufen, eine MySQL-Tabelle ist voll Fehler auftritt und InnoDB rollt die SQL-Anweisung zurück.
  • Ein Transaktionsdeadlock veranlasst InnoDB, die gesamte Transaktion zurückzusetzen.
  • Ein Fehler mit doppeltem Schlüssel setzt die SQL-Anweisung zurück.
  • Eine Zeile zu lange Fehler setzt die SQL-Anweisung zurück.
  • Andere Fehler werden hauptsächlich durch die MySQL Codeschicht (oberhalb des InnoDB Niveau), und sie Zurückdrängung der die entsprechenden SQL-Anweisung
detektiert