2016-05-23 6 views
1

ich ein paar Delete-Anweisungen geschrieben und wickelte sie in einer Transaktion:MySQL Workbench: Transaktion starten scheint vor Rollbacks begangen werden

start transaction; 
delete a... 
delete b... 
delete c... 
rollback; 

Die Idee ist, ich die Löschungen innerhalb einer Transaktion auftreten möchte die würden Rollback nach Abschluss. Wenn ein Schritt auf dem Weg fehlschlägt, möchte ich, dass die erfolgreichen Schritte ebenfalls rückgängig gemacht werden.

Zu meinem Verdruss delete a gearbeitet, ein paar tausend Zeilen zu entfernen, delete b fehlgeschlagen ist, aber wenn ich die Aussagen reran alle Datensätze aus ein erschien weg zu sein.

Liegt das daran, dass die Transaktion noch offen ist? Ich habe versucht, zu tun:

und bekam null Zeilen zurück, so denke ich, dass das nicht der Fall ist. War die erfolgreiche a Löschung festgeschrieben? Und wenn ja, wie verhindere ich dies, bis ich eine vollständige Arbeitsanfrage garantieren kann?

+0

Stellen Sie sicher, dass Sie "autoCommit" deaktivieren. – Barmar

Antwort

4

MySQL Workbench ermöglicht standardmäßig automatisches Commit. Im SQL-Editor gibt es eine Schaltfläche in der Symbolleiste, die verwendet werden können Auto wechseln begeht nach Belieben:

enter image description here

0

Jemand hat mich auf, was ich denke, ist ein besserer Weg, dies zu tun:

begin; 
<sql transactions> 
commit;