Direkt zum Hauptinhalt springen
eLearner.app
Modul 11 · Lektion 1 von 441/57 im Kurs~15 min
Lektionen des Moduls (1/4)

ACID-Transaktionen (BEGIN/COMMIT)

Die Grundlagen der Zuverlässigkeit jeder Datenbank basieren auf dem Akronym ACID:

  • Atomicity: Ein Vorgang wird entweder vollständig abgeschlossen (Commit) oder schlägt fehl und hinterlässt keine halbfertigen Spuren (Rollback).
  • Consistenz: Die Datenbankregeln (z. B. Einschränkungen, Fremdschlüssel) werden immer respektiert.
  • Isolation: Gleichzeitig stattfindende Transaktionen stören sich nicht unkontrolliert gegenseitig.
  • Dhaltbarkeit: Nach einem Commit wird die Änderung unwiderruflich auf die Festplatte geschrieben.

Transaktionssyntax

Normalerweise wird jede einzelne UPDATE- oder DELETE-Abfrage als eigenständige Transaktion behandelt (Autocommit). Wenn Sie jedoch mehrere Vorgänge zusammenfassen möchten, beispielsweise die Belastung des Kundenkontos und die Bestellung, müssen Sie dies explizit mithilfe der Transaktionssyntax tun.

SQL
BEGIN;

UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
INSERT INTO orders (user_id, total) VALUES (1, 100);

COMMIT; -- Writes the changes

Wenn während dieser komplexen Ausführungen die JavaScript-App, die die Abfrage gesendet hat, erkennt, dass ein Problem vorliegt (z. B. nicht genügend Lagerbestände im Lager vorhanden sind und die App abstürzt), sendet sie Folgendes:

SQL
ROLLBACK; -- Cancels the changes and discards the 2 queries sent in the block

Probieren Sie es selbst aus

Übung#sql.m11.l1.e1
Versuche: 0Wird geladen…

Öffnen Sie eine Transaktion. Aktualisieren Sie das Produkt mit der ID 10 und setzen Sie seine „Menge“ in der temporären Tabelle auf 0 (Nein, warten Sie, „Menge“ steht nicht auf Produkten, lassen Sie uns etwas erfinden: Ändern Sie „unit_price“ in „order_items“, aber das erfordert eine Einschränkung. Lassen Sie es uns besser machen: Aktualisieren Sie den Status der Bestell-ID 5 auf „versendet“ und schließen Sie die Transaktion erfolgreich ab.

Editor wird geladen…
Hinweis anzeigen

Beginnen Sie mit BEGIN;, ändern Sie Bestellungen für id = 5 in status='shipped' und senden Sie sie dann mit COMMIT;

Lösung nach 3 Versuchen verfügbar

Übung#sql.m11.l1.e2
Versuche: 0Wird geladen…

Panik in der Produktion! Ein Entwickler hat einen DELETE-Befehl ohne das WHERE geschrieben und dabei alle Rezensionen gelöscht. Lassen Sie uns ihnen zeigen, wie ein Rollback durchgeführt wird. Starten Sie eine Transaktion, lösen Sie einen schnellen DELETE-Befehl aus, der alles aus den „Überprüfungen“ löscht (ohne WHERE-Klausel), aber verwenden Sie dann den SQL-Lebensretter, um die Auswirkung rückgängig zu machen, bevor Sie den Block abschließen.

Editor wird geladen…
Hinweis anzeigen

BEGIN;, das saubere Löschen von „Bewertungen“ und dann das magische ROLLBACK; Am Ende.

Lösung nach 3 Versuchen verfügbar