Thread Autocommit oder commit? (4 answers)
Opened by Kuerbis at 2014-09-11 16:06

Muffi
 2014-09-12 09:04
#177231 #177231
User since
2012-07-18
1465 Artikel
BenutzerIn
[default_avatar]
Also wenn du mehr über Transaktionen wissen willst würd sichs rentieren sich da ein wenig einzulesen. Das Thema ist kein Einzeiler.

Aber als Kurzfassung:
Achtung: Man kann bei Transaktionen viel umstellen, die Beschreibung ist für ein Standardverhalten. Und: Die DB muss Transaktionen unterstützen (myisam tut das z.B. nicht)
Eine (Datenbank) Transaktion ist ein Block an Anweisungen, die entweder komplett oder garnicht ausgeführt werden sollen. Also nicht nur die Hälfte, wenn z.B. das Skript in der Mitte crasht.
Die Datenbank merkt sich das alles und macht das erst bei einem Commit für alle anderen sichtbar. Kommt kein Commit (z.B. weil das Programm mittendrin abstürzt) wird ein Rollback gefahren und die Anweisungen sind KOMPLETT nie passiert. Ein Rollback kann auch manuell abgesetzt werden.

Zudem sehen alle Anderen (wie oben erwähnt) die Änderungen erst nach dem Commit. Haben also nicht irgend einen Mischmaschstand bei dem nur ein Teil der Änderungen gemacht sind.

Zu deinem UPDATE: ein einzelner Befehl ist immer (zumindest fällt mir grad keine Ausnahme ein) atomar. D.h. er wird nicht zwischendrin unterbrochen.
Alle andern sehn das Ergebnis also erst wenn der Befehl komplett durch ist.
Wenn die DB Transaktionen unterstützt ist er auch intern eine Transaktion. D.h. er läuft komplett oder garnicht durch.
Bei Datenbanken (wie myisam) die keine Transaktionen haben ists ein wenig blöder. Falls der Befehl plötzlich einen Fehler macht, abgebrochen wird, ... ist das doof, weil der Befehl dann wirklich nur halb fertig ist. Deswegen ist bei myisam die Mentalität den Befehl wenns irgendwie geht durchlaufen zu lassen und alles was schief ging als warning zu schreiben.
Viele Leute, die sich bei myisam darüber beschweren oder lustig machen, dass alles nur warnings sind kennen einfach den Hintergrund nicht. Und dass das Verhalten durchaus sinnvoll ist.
1 + 1 = 10

View full thread Autocommit oder commit?