PostgreSQL - TRANSAKTIONEN
Eine Transaktion ist eine Arbeitseinheit, die für eine Datenbank ausgeführt wird. Transaktionen sind Einheiten oder Abfolgen von Arbeiten, die in einer logischen Reihenfolge ausgeführt werden, entweder manuell von einem Benutzer oder automatisch von einer Art Datenbankprogramm.
Eine Transaktion ist die Weitergabe einer oder mehrerer Änderungen an der Datenbank. Wenn Sie beispielsweise einen Datensatz erstellen, einen Datensatz aktualisieren oder einen Datensatz aus der Tabelle löschen, führen Sie eine Transaktion für die Tabelle aus. Es ist wichtig, Transaktionen zu steuern, um die Datenintegrität sicherzustellen und Datenbankfehler zu behandeln.
In der Praxis werden Sie viele PostgreSQL-Abfragen zu einer Gruppe zusammenfassen und alle zusammen als Teil einer Transaktion ausführen.
Eigenschaften von Transaktionen
Transaktionen haben die folgenden vier Standardeigenschaften, die normalerweise mit dem Akronym ACID bezeichnet werden:
Atomicity- stellt sicher, dass alle Vorgänge innerhalb der Arbeitseinheit erfolgreich abgeschlossen wurden; Andernfalls wird die Transaktion zum Zeitpunkt des Ausfalls abgebrochen und frühere Vorgänge werden auf ihren vorherigen Status zurückgesetzt.
Consistency - Stellt sicher, dass die Datenbank bei einer erfolgreich festgeschriebenen Transaktion den Status ordnungsgemäß ändert.
Isolation - Ermöglicht den unabhängigen und transparenten Betrieb von Transaktionen.
Durability - Stellt sicher, dass das Ergebnis oder die Wirkung einer festgeschriebenen Transaktion bei einem Systemausfall bestehen bleibt.
Transaktionskontrolle
Die folgenden Befehle werden zur Steuerung von Transaktionen verwendet:
BEGIN TRANSACTION - Um eine Transaktion zu starten.
COMMIT - Um die Änderungen zu speichern, können Sie sie alternativ verwenden END TRANSACTION Befehl.
ROLLBACK - Um die Änderungen rückgängig zu machen.
Transaktionssteuerbefehle werden nur mit den DML-Befehlen INSERT, UPDATE und DELETE verwendet. Sie können beim Erstellen oder Löschen von Tabellen nicht verwendet werden, da diese Vorgänge automatisch in der Datenbank festgeschrieben werden.
Der Befehl BEGIN TRANSACTION
Transaktionen können mit BEGIN TRANSACTION oder einfach mit dem Befehl BEGIN gestartet werden. Solche Transaktionen bleiben normalerweise bestehen, bis der nächste Befehl COMMIT oder ROLLBACK auftritt. Eine Transaktion wird jedoch auch rückgängig gemacht, wenn die Datenbank geschlossen wird oder wenn ein Fehler auftritt.
Das Folgende ist die einfache Syntax zum Starten einer Transaktion:
BEGIN;
or
BEGIN TRANSACTION;
Der Befehl COMMIT
Der Befehl COMMIT ist der Transaktionsbefehl, mit dem Änderungen, die von einer Transaktion aufgerufen werden, in der Datenbank gespeichert werden.
Der Befehl COMMIT speichert alle Transaktionen in der Datenbank seit dem letzten Befehl COMMIT oder ROLLBACK.
Die Syntax für den Befehl COMMIT lautet wie folgt:
COMMIT;
or
END TRANSACTION;
Der ROLLBACK-Befehl
Der Befehl ROLLBACK ist der Transaktionsbefehl, mit dem Transaktionen rückgängig gemacht werden, die noch nicht in der Datenbank gespeichert wurden.
Der Befehl ROLLBACK kann nur zum Rückgängigmachen von Transaktionen verwendet werden, seit der letzte Befehl COMMIT oder ROLLBACK ausgegeben wurde.
Die Syntax für den Befehl ROLLBACK lautet wie folgt:
ROLLBACK;
Beispiel
Angenommen, die COMPANY- Tabelle enthält die folgenden Datensätze:
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
Lassen Sie uns nun eine Transaktion starten und Datensätze aus der Tabelle mit dem Alter = 25 löschen. Schließlich verwenden wir den Befehl ROLLBACK, um alle Änderungen rückgängig zu machen.
testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;
Wenn Sie überprüfen, ob die COMPANY-Tabelle noch die folgenden Datensätze enthält:
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
Lassen Sie uns nun eine weitere Transaktion starten und Datensätze aus der Tabelle mit dem Alter = 25 löschen. Schließlich verwenden wir den Befehl COMMIT, um alle Änderungen festzuschreiben.
testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;
Wenn Sie die COMPANY-Tabelle überprüfen, enthält sie noch die folgenden Datensätze:
id | name | age | address | salary
----+-------+-----+------------+--------
1 | Paul | 32 | California | 20000
3 | Teddy | 23 | Norway | 20000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
(5 rows)