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