PL/SQL - Transaktionen: Ein Anfängerleitfaden

Hallo da draußen, zukünftige Datenbank-Zauberer! Heute begeben wir uns auf eine aufregende Reise in die Welt der PL/SQL-Transaktionen. Keine Sorge, wenn du neu im Programmieren bist; ich werde dein freundlicher Guide sein und alles Schritt für Schritt erklären. Also, tauchen wir ein!

PL/SQL - Transactions

Was sind Transaktionen?

Bevor wir loslegen, lassen Sie uns verstehen, was Transaktionen sind. Stellen Sie sich vor, Sie überweisen Geld von Ihrem Sparkonto auf Ihr Girokonto. Diese Operation umfasst zwei Schritte:

  1. Abziehen von Geld vom Sparkonto
  2. Hinzufügen von Geld zum Girokonto

Diese beiden Schritte bilden gemeinsam eine Transaktion. Es ist entscheidend, dass entweder beide Schritte stattfinden oder keiner stattfindet. Wir wollen nicht, dass Geld aus dem Nichts verschwindet oder erscheint!

Starten und Beenden einer Transaktion

In PL/SQL beginnen Transaktionen automatisch, wenn Sie Ihre erste DML (Data Manipulation Language)-Anweisung ausführen. Dazu gehören INSERT, UPDATE und DELETE-Operationen. Sehen wir uns ein Beispiel an:

BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1001, 'John', 'Doe');

UPDATE employees
SET salary = 50000
WHERE employee_id = 1001;
END;
/

In diesem Beispiel beginnt eine Transaktion, sobald die INSERT-Anweisung ausgeführt wird. Die Transaktion setzt mit der UPDATE-Anweisung fort.

Eine Transaktion committen

Nun fragen Sie sich vielleicht, "Okay, wir haben eine Transaktion gestartet, aber wie beenden wir sie?" Great question! Wir verwenden die COMMIT-Anweisung, um eine Transaktion zu beenden und alle Änderungen dauerhaft zu speichern. Lassen Sie uns unser vorheriges Beispiel ändern:

BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1001, 'John', 'Doe');

UPDATE employees
SET salary = 50000
WHERE employee_id = 1001;

COMMIT;
END;
/

Durch Hinzufügen der COMMIT-Anweisung am Ende sagen wir der Datenbank, "Ja, ich bin sicher über diese Änderungen. Bitte machen Sie sie dauerhaft."

Warum COMMIT wichtig ist

Stellen Sie sich vor, Sie backen einen Kuchen. Sie haben alle Zutaten gemischt, aber bis Sie ihn in den Ofen schieben, ist es noch kein Kuchen. Ähnlich verhält es sich mit dem COMMIT Ihrer Transaktion; bis Sie commiten, sind die Änderungen nicht dauerhaft in der Datenbank gespeichert.

Transaktionen rückgängig machen

Manchmal läuft nicht alles nach Plan. Vielleicht haben Sie bemerkt, dass Sie in Ihrer Transaktion einen Fehler gemacht haben. Keine Panik! PL/SQL bietet uns ein Sicherheitsnetz namens ROLLBACK. Es ist wie eine "Rückgängig"-Schaltfläche für Ihre Datenbankoperationen.

BEGIN
UPDATE employees
SET salary = salary * 2;  -- Ups! Wir wollten nicht das Gehalt aller verdoppeln!

ROLLBACK;  -- Puh! Krise abgewendet.
END;
/

In diesem Beispiel haben wir versehentlich das Gehalt aller verdoppelt (würde das nicht schön sein?). Aber Dank des ROLLBACK können wir diese Änderung rückgängig machen, bevor sie dauerhaft wird.

Automatische Transaktionssteuerung

PL/SQL bietet auch in bestimmten Situationen automatische Transaktionssteuerung. Sehen wir uns eine Tabelle dieser Szenarien an:

Szenario Aktion
Normales Ende eines PL/SQL-Blocks Automatisches COMMIT
Laufzeitfehler während einer Transaktion Automatisches ROLLBACK
SQL*Plus EXIT-Befehl (ohne COMMIT) Automatisches ROLLBACK
Systemabsturz Automatisches ROLLBACK

Beispiel für automatisches Rollback

BEGIN
UPDATE employees
SET salary = salary / 0;  -- Ups! Division durch Null-Fehler
END;
/

In diesem Fall wird PL/SQL die Transaktion automatisch rückgängig machen, aufgrund des Laufzeitfehlers.

Savepoints: Erstellen von Kontrollpunkten in Ihrer Transaktion

Manchmal möchten Sie möglicherweise nur einen Teil einer Transaktion rückgängig machen, aber nicht den gesamten. Hier kommen Savepoints ins Spiel. Sie sind wie Kontrollpunkte in einem Videospiel - Sie können zu ihnen zurückkehren, wenn etwas schiefgeht.

BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1002, 'Jane', 'Smith');

SAVEPOINT after_insert;

UPDATE employees
SET salary = 60000
WHERE employee_id = 1002;

-- Ups, wir haben uns geändert
ROLLBACK TO after_insert;

COMMIT;
END;
/

In diesem Beispiel fügen wir einen neuen Mitarbeiter hinzu und erstellen einen Savepoint. Dann aktualisieren wir das Gehalt, aber entscheiden uns, zum Savepoint zurückzukehren, was die Gehaltsaktualisierung rückgängig macht, aber die Einbettung beibehält.

Best Practices für die Verwendung von Transaktionen

  1. Halten Sie Transaktionen kurz: Lange laufende Transaktionen können Ressourcen sperren und die Systemleistung beeinflussen.
  2. Verwenden Sie explizite COMMIT-Anweisungen: Obwohl PL/SQL in einigen Fällen automatisch committen kann, ist es besser, explizit anzugeben, wann Sie Ihre Änderungen committen möchten.
  3. Behandeln Sie Ausnahmen ordnungsgemäß: Stellen Sie sicher, dass Sie ordnungsgemäße Ausnahmeanweisungen haben, um unerwünschte Commits oder Rollbacks zu vermeiden.
  4. Verwenden Sie Savepoints für komplexe Transaktionen: Wenn Sie eine lange Transaktion haben, erwägen Sie die Verwendung von Savepoints, um teilweise Rollbacks zu ermöglichen.

Schlussfolgerung

Und das war's, Leute! Wir haben die Welt der PL/SQL-Transaktionen durchquert, von deren Start und Ende bis hin zum Commit und Rollback und sogar zur Erstellung von Savepoints. Erinnern Sie sich daran, dass Transaktionen wie der Sicherheitsgurt von Datenbankoperationen sind - sie stellen sicher, dass Ihre Daten konsistent und zuverlässig bleiben.

Üben Sie diese Konzepte, experimentieren Sie mit verschiedenen Szenarien und schon bald werden Sie Transaktionen wie ein Profi verwalten. Viel Spaß beim Coden, und möge Ihre Transaktionen stets ACID sein (das ist ein Datenbankwitz für einen anderen Tag)!

Credits: Image by storyset