Lektionen des Moduls (4/4)
Transaktionen: Alles oder nichts
Eine Transaktion ist eine Gruppe von Vorgängen, die die Datenbank als solche behandelt
eine einzelne Einheit: Entweder sind sie alle erfolgreich, oder keiner von ihnen hinterlässt eine
Spur. So schützen Sie sich vor Inkonsistenzen bei einer Sequenz
von UPDATE/INSERT/DELETE müssen konsistent bleiben.
Die Syntax
BEGIN; -- apri la transazione
UPDATE …;
INSERT …;
DELETE …;
SELECT …; -- puoi anche solo leggere
COMMIT; -- conferma tutte le modifiche
-- oppure
ROLLBACK; -- annulla tutte le modifiche, come se nulla fosseAlles zwischen BEGIN und COMMIT ist atomar: keine andere Verbindung
sieht den Zwischenzustand. Wenn das Programm abstürzt oder ausgeführt wird
ROLLBACK, die Datenbank bleibt genau so, wie sie vor BEGIN war.
Das klassische Szenario: der Transfer
Das kanonische Beispiel ist eine Umlagerung zwischen Produkten (oder einer Geldtransaktion).
Übertragung zwischen Konten): zwei UPDATEs, die zusammen erfolgreich sein müssen,
niemals das eine ja und das andere nein.
BEGIN;
UPDATE products SET stock = stock - 1 WHERE id = 1;
UPDATE products SET stock = stock + 1 WHERE id = 2;
COMMIT;Wenn der zweite UPDATE fehlschlägt (z. B. ein CHECK-Einschränkungsfehler), a
ROLLBACK stellt den Bestand von Produkt 1 wieder auf seinen ursprünglichen Wert her.
ROLLBACK: der Debugger des DBA
BEGIN;
UPDATE customers SET city = 'X' WHERE id = 1;
SELECT first_name, city FROM customers WHERE id = 1; -- "vedo come è cambiato"
ROLLBACK;Ein sehr nützliches Muster zum Ausprobieren eines UPDATE an echten Daten: Sie
Führen Sie es aus, überprüfen Sie das Ergebnis mit einem SELECT in derselben Transaktion und
Wenn es Sie nicht überzeugt, verwenden Sie ROLLBACK – die Datenbank ist genau so
es war vorher.
SAVEPOINT: teilweises Rollback
Innerhalb einer Transaktion können Sie Zwischenpunkte erstellen:
BEGIN;
UPDATE customers SET city = 'A' WHERE id = 1;
SAVEPOINT step1;
UPDATE customers SET city = 'B' WHERE id = 2;
-- mi sono accorto che il secondo UPDATE è sbagliato:
ROLLBACK TO SAVEPOINT step1;
COMMIT; -- solo il primo UPDATE viene confermatoACID in 30 Sekunden
Transaktionen garantieren die ACID-Eigenschaften:
- Atomizität – alles oder nichts;
- **Konsistenz – Einschränkungen bleiben zu Beginn und am Ende der Transaktion erfüllt;
- Isolation – gleichzeitige Transaktionen sehen keine Zwischenzustände (auf verschiedenen „Ebenen“);
- DDauerhaftigkeit – ein erfolgreicher
COMMITgeht auch im Falle eines Absturzes nicht verloren.
Du bist dran
In einer einzigen Transaktion: Verringern Sie den Bestand von Produkt 1 um 1 und erhöhen Sie den Bestand von Produkt 2 um 1. Öffnen Sie mit BEGIN und schließen Sie mit COMMIT.
Hinweis anzeigen
Referenzbestand - 1 und Bestand + 1 in den jeweiligen SET-Klauseln.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Öffnen Sie eine Transaktion, versuchen Sie, die Stadt des Kunden mit der ID=1 auf „Sperimentale“ zu aktualisieren, und brechen Sie den Vorgang dann mit ROLLBACK ab. Am Ende muss die Stadt von Kunde 1 die ursprüngliche sein („Mailand“).
Hinweis anzeigen
ROLLBACK verwirft jede von BEGIN an vorgenommene Änderung.
Lösung nach 3 Versuchen verfügbar