Zum Inhalt springen
  • 0

SQL Transaction


f3nnek

Frage

4 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

Eine Transaktion ist eine Art Tagebuch. In einer Transaktion werden alle Änderungen an der Datenbank protokolliert und falls ein Fehler auftreten sollte, der zu einer Inkonsistenz der Daten führt, lassen sich alle Änderungen wieder rückgängig machen, um wieder auf den Ursprungspunkt zurückzukehren.

Angenommen du hast folgende Tabelle:

ARTIKEL
------------------------
ARTIKEL_ID   NUMBER(10)
BEZEICHNUNG  VARCHAR(10)
ANZAHL       NUMBER(10)
PREIS        NUMBER(5,2)

Und jemand will folgende Zeilen in die Tabelle schreiben:

ARTIKEL_ID BEZEICHNUNG ANZAHL PREISE
1          Füller      100    1,99
2          Bleistift   123    0,59
3          Federtasche  50    7,99

Dies würde dann zu einem Fehler führen, weil der Begriff "Federtasche" 11 Zeichen besitzt aber die Spalte nur 10 Zeichen umfassen kann. Damit hätten wir einen inkonsistenten Zustand, weil wir die ersten beiden Artikel in die Tabelle schreiben könnten aber den dritten nicht. Mit einer Transaktion könnten wir alles wieder rückgängig machen und die Tabelle wieder so hinterlassen, wie sie vorher war (ein sog. Rollback) und der Fehler wird gemeldet. Die Daten können dann korrigiert werden und das ganze noch mal versuchen.

Ein weiterer Vorteil von Transaktionen ist, dass die Daten erst geschrieben werden, wenn man das OK gibt. Also ein Commit ausführt. Angenommen, es greifen mehrere Leute gleichzeitig auf die Datenbank und man will viele Änderungen ausführen. Wenn dann die anderen die Daten währenddessen lesen und wir würden sofort jede Änderung wegschreiben, dann könnten die anderen ggf. einen inkonsistenten Stand lesen, was dann zu Fehlern führen kann. Erst, wenn wir dann das OK geben, können dann die anderen die neuen Daten lesen.

Und weil die Daten erst geschrieben werden, wenn man das OK gibt, haben wir auch einen Performance-Vorteil, weil das Schreiben der Daten ein sehr teurer Prozess ist, da die Daten auf die Festplatte geschrieben werden aber die Performance ist zweitrangig. Vordergründig geht es um die Konsistenz der Daten.

Mit START TRANSACTION startest du halt eine Transaktion und mit COMMIT oder ROLLBACK beendest du sie wieder. Bei COMMIT werden dann die Daten weggeschrieben und mit ROLLBACK wieder rückgängig gemacht.

Bearbeitet von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

... und richtig geile DBs können sogar Strukturänderungen in Transaktionen.

Wenn du im obigen Beispiel bei einem Update der Applikation die Preise in eine eigene Tabelle auslagern willst, dann legst du die neue Tabelle mit Spalte "Preis" an, kopierst die Preise von der einen in die andere Tabelle und löscht anschließend die Preisspalte in der ersten Tabelle.

Das alles in einer Transaktion stellt sicher, dass du immer einen konsistenten Stand hast, egal ob dein Update der Applikation vielleicht scheitert. Es gibt nur alt oder neu, aber nichts dazwischen.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...