Hello,
wie kann ich bei einem MySQL-Query ein Update und ein Insert atomar binden?
Gibt es dafür inzwischen eine Lösung, außer die Tabelle zu sperren während der beiden Statements?Klar - nutze Transaktionen für's Schreiben (BEGIN, dann Deine INSERT/UPDATE/DELETE, dann COMMIT oder ROLLBACK bei Fehler), MySQL kann das (InnoDB vorausgestzt) schon eine ganze Weile.
Das hatte ich gelesen. http://dev.mysql.com/doc/refman/5.1/en/commit.html
Meine Datenbanken sind leider vollständig mit MyISAM gebaut. Da muss ich die erstmal umbauen. Aber ich habe noch im Gedächtnis, dass Relations mit MyISAM auch nicht möglich sind, aber mit InnoDB. Dann würde es sich wenigstens lohnen.
Wenn das Isolation Level auf REPEATABLE READ oder SERIALIZABLE steht (REPEATABLE READ ist der Defaultwert), dann sind alle COMMITs der Transaktion atomar. Das Isolation Level kannst Du problemlos für Deine Sitzung umstellen, d.h. wenn Du ganz sicher sein willst, nutze am Anfang jeder Sitzung [*] (auch und gerade bei lesenden (!) Sitzungen) folgendes (ganz am Anfang vor jeder gestarteten Transaktion):
TRANSACTION ISOLATION LEVEL REPEATABLE READ
[*] Sitzung im Sinne von MySQL-Verbindung.
verstehe ich das richtig, dass ich innerhalb einer Transaktion mehrere Commits anwenden kann und das Rollback dann immer nur das letzte wiederherstellen müsste? Oder muss für jedes Commit eine eigene Transaktion aufgemacht werden?
Liebe Grüße aus dem Cyberspace
Tom vom Berg