Seitenleiste

Community

SQL

Grundlagen

Datenbanksysteme

Client/Server

Eingebettet

Transaktionen

Transaktionen - Was ist das?

Eine Transaktion ist eine Anzahl von DML - Befehlen (INSERT, UPDATE, DELETE) die eine Datenbank von einem konsistenten (alle Daten der Datenbank in einwandfreiem/fehlerlosen Zustand) Zustand in einen anderen konsistenten Zustand überführt. Sie sind nur ganz oder gar nicht möglich. Bei Problemen innerhalb der Transaktionen müssel alle (auch bereits ausgeführten Befehle) zurückgenommen (zurückgerollt - rollback) werden.

Ein praktisches Beispiel wäre eine Banküberweisung (z.B. von 100 €):

  • Konto 1 wird mit 100 € belastet (UPDATE)
  • Auf Konto 2 werden 100 € gut geschrieben (UPDATE)
  • Die Buchung wird in der Kontrolltabelle eingetragen (INSERT)

Alle 3 Aktionen müssen entweder durchgeführt oder zurückgenommen werden.

Beginn einer Transaktion

Der Beginn einer Transaktion ist immer der 1. ausgeführte DML Befehl oder das Ende einer vorhergehenden Transaktion.

Ende einer Transaktion

Eine Transaktion kann auf verschiedenen Wegen beendet werden:

  • Durch ein COMMIT - in diesem Fall ist alles OK
  • Durch ein ROLLBACK - es ist ein Fehler aufgetreten und alle bereits durchgeführten Befehle der Transaktion müssen rückgängig gemacht werden
  • Ein DDL Befehl (z.B. CREATE) - hat den gleichen Effekt wie ein COMMIT
  • EXIT Befehl - hier wird das Tool verlassen mit dem auf die Datenbank zugegriffen wird (gleich wie COMMIT)
  • Durch einen Fehler, Absturz oder Deadlock - in diesen Fällen wird ein ROLLBACK durchgeführt

Transaktionssteuerung

Implizit bei COMMIT und ROLLBACK

COMMIT

Ein COMMIT wird auch implizit bei einem DDL Befehl oder dem EXIT Befehl durchgeführt. Oft ist auch das sogenannte „AUTO-COMMIT-Flag“ gesetzt. Das heißt, dass nach jedem erfolgreichem Befehl ein COMMIT durchgeführt wird.

ROLLBACK

Ein ROLLBACK wird nach einem Systemabsturz bzw. nach einer nicht normalen Beendigung eines Tools implizit gerufen.

Status der Daten vor COMMIT bzw. ROLLBACK

  • Alter Status kann jederzeit mittels ROLLBACK hergestellt werden
  • Der ausführende Benutzer sieht mittels SELECT die Änderungen der aktuellen Transaktionen
  • Andere Benutzer sehen den Zustand der Datenbank vor der aktuellen Transaktion
  • Die von der Transaktion betroffenen Datensätze sind für alle anderen Benutzer gesperrt (bezieht sich nur auf DML Befehle)

Status nach COMMIT

Die Änderungen der aktuellen Transaktion werden in die Datenbank geschrieben. Der Startzustand geht verloren (kann nicht mehr erreicht werden. Alle anderen User können nun auch die Änderungen sehen. Als letztes werden alle Savepoints gelöscht und die Sperren aufgehoben.

Status nach ROLLBACK

Alle Änderungen der aktuellen Transaktion werden verworfen und der Startzustand wird wieder hergestellt. Etwaige Sperren werden wieder aufgehoben.