Databases Reference
In-Depth Information
set autocommit off
ein- oder ausschalten. Mit den Standardeinstellungen von H2 können wir mehrere
SQL-Anweisungen also nicht zu Transaktionen gruppieren, da der autocommit
eingeschaltet ist. Im Autocommit-Modus sind die Anweisungen commit und
rollback wirkungslos. Die Folge
update konten set saldo=saldo-1.20;
update konten set saldo=saldo * 1.05;
commit;
ist bei zugeschaltetem Autocommit-Modus die gleiche Wirkung wie
update konten set saldo=saldo-1.20;
commit;
update konten set saldo=saldo * 1.05;
commit;
Wir haben es hier also nicht mit einer, sondern mit zwei Transaktionen zu
tun. Wenn wir die Transaktionsgrenzen selbst setzen wollen, müssen wir
den Autocommit-Modus ausschalten. Wir können uns jetzt fragen, warum
autocommit off nicht der Standard ist. Wenn wir selbst Transaktionen begren-
zen, dürfen wir nicht vergessen, sie mit commit abzuschließen. Sollte es insbeson-
dere nach dem Ende der Verbindung noch offene Transaktionen - also solche, die
nicht mit commit abgeschlossen wurden - geben, werden sie implizit rückgängig
gemacht. Die verschwundenen Daten verwirren dann nicht nur Einsteiger, die
von Transaktionen noch nichts gehört haben.
Wir überzeugen uns leicht davon, wenn wir die Anweisungsfolge
set autocommit off;
delete from konten;
commit;
insert into konten(saldo) values(100.0);
in der H2-Konsole ausführen, dann mit dem Button ganz links oben in der H2-
Console die Verbindung zum RDBMS trennen und uns anschließend neu verbin-
den. Ein einfacher select auf die konten -Tabelle zeigt, dass sie leer ist. Da man
in Eile oder aus Unwissenheit das abschließende commit vergessen kann, wä-
ren alle Änderungen am Datenbestand unwirksam, wenn autocommit off der
Standard wäre.
17.4
Das Transaktionsprotokoll
Wir haben gesehen, dass wir im Dialog mit H2 immer in einer Transaktion sind
und das RDBMS die atomare Eigenschaft von Transaktionen gewährleistet. Es
Search WWH ::




Custom Search