Transaktionen in Datenbanken
Eine Datenbanktransaktion besteht aus einer Gruppe von Teilaktionen, die in einer oder mehreren Datenbanktabellen erfolgreich ausgeführt werden müssen, bevor sie endgültig festgeschrieben (Commit) werden können.Schlägt eine der Teiltransaktionen in der Gruppe fehl, werden alle anderen Teilaktionen ebenfalls rückgängig gemacht (Rollback).
Transaktionen verhindern, dass die Datenbank in einen inkonsistenten Zustand gerät, wenn ein Problem bei der Durchführung einer der Aktionen auftritt, aus denen sich die Transaktion zusammensetzt.
ACID-Eigenschaften
Bei einer Transaktion muss dass Transaktionssystem die ACID-Eigenschaften garantieren und beherrschen:
Atomarität (Atomicity)
Eine Transaktion wird vollständig oder gar nicht ausgeführt. Die Transaktion ist unteilbar und wenn Sie abgebrochen wird, hat das keine Auswirkungen auf das System.
Konsistenz (Consistency)
Nach einer Ausübung einer Transaktion muss der Datenbestand wieder konsistent sein und darf keine Anomalien oder Redundanzen aufweisen.
Isolation (Isolation)
Gleichzeitige Transaktionen dürfen sich gegenseitig nicht beeinflussen.
Dauerhaftigkeit (Durability)
Die Auswirkungen einer Transaktion müssen dauerhaft bestehen bleiben, das heißt: "Sie dürfen nicht ihre Gültigkeit in der Datenbank verlieren. Eine Verschachtelung von mehreren Transaktionen ist deswegen nicht möglich."
Jede Transaktion wird nach einer anderen Transaktion ausgeführt. Daher ist es nicht möglich, dass eine äußere Transaktion die Dauerhaftigkeit einer inneren, bereits festgeschriebenen Transaktion verletzen würde.
Sind diese Eigenschaften gegeben, so ist die Grundlage gegeben auf ein stabiles System eine Datenbank, zu entwickeln.
Transaktion nach dem ACID-Prinzip
Verbindung zur Datenbank wird hergestellt
In diesem Schritt wird über eine Verbindung, mittels Connection String (Verbindungsparameter) Kontakt mit einer Datenbank aufgenommen.
SQL-Statement wird ausgeführt
Wenn nun ein Eintrag hinzugefügt/geändert oder gelöscht wird, ist der Eintrag in der dazugehörigen Tabelle eingefügt/geändert oder gelöscht worden, aber noch nicht endgültig in die Tabelle geschrieben worden.
Commit oder Rollback
Commit-Anweisung wird durchgeführt: Wenn bis zu diesem Zeitpunkt keine Fehler aufgetreten sind, ob nun im Verbindungsaufbau zur Datenbank oder Tippfehler im SQL-Statement vorliegen, so kann nun mithilfe der Commit-Anweisung, der neue Eintrag in der Tabelle festgeschrieben werden.
Rollback-Anweisung wird durchgeführt: Ein Rollback geschieht immer dann, wenn in der Datenbank ein Fehler auftritt. Mögliche Gründe können sein: Tippfehler des Programmierers im SQL-Statement oder Benutzereingaben, die als nicht ordnungsgemäß von der Datenbank angesehen werden.
Das Rollback kann bis auf den Anfang der Transaktion zurückverweisen um eine konsistente Datenbank sicherzustellen. Dennoch werden von erfahrenden Entwicklern Sicherungspunkte eingebaut, so genannte Savepoints, die nur bis zu einem bestimmten Punkt in der Transaktion die geänderten Werte rückgängig macht.
Verbindung zur Datenbank trennen
Ist nun das Commit ausgeführt worden und keine Fehlermeldung aufgetreten, kann nun die Verbindung wieder geschlossen werden.
Ob eine ständige Öffnung bzw. Schließung der Verbindung sinnvoll ist, hängt immer vom Datenbankprojekt ab und wie viele User am Ende die Datenbank benutzen.