Certified MySQL Associate: Kapitel 29 (29.4.2 + 29.4.3)

29.4.2 InnoDB and ACID Compliance

ACID steht für Atomicity, Consistency, Isolation, Durability. Ins Deutsche übersetzt bedeuten die Bezeichnungen Atomarität (atomicity), Konsistenz (consistency), Isoliertheit (isolation) und Dauerhaftigkeit (durability). Diese Eigenschaften sollen gewährleisten, dass Datenbank-Transaktionen sicher und zuverlässig durchgeführt werden.

Die Storage Engine InnoDB ist eine Storage Engine, die ACID-konform betrieben werden kann und Transaktionen beherrscht. Eine Transaktion ist eine logische Gruppierung von Operationen, es werden also zusammenhängende Anweisungen/Operationen zu einer Transaktion zusammengefasst. MySQL gaukelt dem Benutzer vor, dass die Transaktion eine einzelne elementare Operation wäre, die nicht von anderen Operationen unterbrochen werden kann.

Atomarität
Eine Transaktion darf entweder ganz oder gar nicht ausgeführt werden. Wird eine Transaktion nur teilweise ausgeführt und kann nicht abgeschlossen werden, so werden die Aktionen rückgängig gemacht (Rollback).

Konsistenz
Eine Transaktion muss konsistente Datensätze hinterlassen. Natürlich müssen die Datensätze auch vorher konstent gewesen sein.

Isolation
Eine Transaktion darf keine andere Transaktion beeinflussen

Dauerhaftigkeit
Änderungen durch Transaktion bleiben dauerhauft in der Datenbank erhalten (auch nach Systemabstürzen)

29.4.3 The InnoDB Transaction Model

In InnoDB findet jegliche Benutzeraktivität in einer Transaktion statt. Wenn der Autocommit-Modus eingeschaltet ist, bildet jede SQL-Anweisung eine eigene Transaktion. Stand

Um mehrere Statements zu einer Transaktion zu gruppieren, so dass der Erfolg/Misserfolg von dieser einzelnen Einheit abhängig ist, muss man den Autocommit-Modus deaktivieren.

# Autocommit-Modus deaktivieren
SET AUTOCOMMIT = 0;

Eine Transaktion wird mit dem Schlüsselwort START TRANSACTION eingeleitet. Wenn Autocommit deaktiviert ist, so wird jedes darauffolgende Statement Teil der Transaktion. Eine Transaktion wird mit COMMIT oder ROLLBACK beendet.

# Beispiel einer Transaktion
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
SELECT * FROM tbl01;
COMMIT;

COMMIT übergibt die aktuelle Transaktion, macht also die entsprechenden Änderungen permanent. Mit ROLLBACK können Transaktionen rückgängig gemacht werden. Wenn man nur einen Teil einer Transaktion rückgängig machen möchte, muss man SAVEPOINTS setzen:

# ROLLBACK zu einem SAVEPOINT
# Nur einen Teil der Transaktion rückgängig machen
SAVEPOINT save_10;
....
ROLLBACK TO SAVEPOINT save_10;