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.
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
INSERT INTO orders (user_id, total) VALUES (1, 100);
COMMIT; -- Writes the changesWenn 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:
ROLLBACK; -- Cancels the changes and discards the 2 queries sent in the blockProbieren Sie es selbst aus
Ö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.
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
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.
Hinweis anzeigen
BEGIN;, das saubere Löschen von „Bewertungen“ und dann das magische ROLLBACK; Am Ende.
Lösung nach 3 Versuchen verfügbar