Info zu DML-Anweisungen und -Transaktionen
DML-(Data Manipulation Language-)Anweisungen fügen Daten aus Datenbanktabellen hinzu, ändern und löschen sie. Eine Transaktion ist eine Folge von SQL-Anweisungen, die von Oracle AI Database als Einheit behandelt werden: Entweder werden alle Anweisungen ausgeführt oder gar keine.
Info zu Transaktionssteuerungs-Anweisungen
Eine Transaktion ist eine Folge von SQL-Anweisungen, die von Oracle AI Database als Einheit behandelt werden: Entweder werden alle Anweisungen ausgeführt oder gar keine. Transaktionen dienen dazu, Geschäftsvorgänge zu modellieren, die erfordern, dass mehrere Vorgänge als Einheit vorgenommen werden.
Beispiel: Wenn ein Manager das Geschäft verlässt, muss eine Zeile in die Tabelle JOB_HISTORY eingefügt werden, um anzugeben , wann der Manager das Geschäft verlassen hat. Für jeden Mitarbeiter, der diesem Manager unterstellt ist, muss der Wert MANAGER_ID in der Tabelle EMPLOYEES aktualisiert werden. Um diesen Prozess in einer Anwendung zu modellieren, müssen Sie die Anweisungen INSERT und UPDATE zu einer einzelnen Transaktion gruppieren.
Die grundlegenden Transaktionssteueranweisungen sind:
-
SAVEPOINT, über die ein SAVEPOINT in einer Transaktion markiert wird, ein Punkt, zu dem später eine Rollback durchgeführt werden kann. Savepoints sind optional, und eine Transaktion kann mehrere Savepoints haben.
-
COMMIT, über die die aktuelle Transaktion beendet wird, ihre Änderungen dauerhaft erhalten, Savepoints löschen und zugehörige Sperren aufgehoben werden.
-
ROLLBACK, die entweder ein ROLLBACK durchführt, sie auch aufhebt, oder ein Rollbacks für alle Änderungen durchführt, die nach dem angegebenen Savepoint erfolgten.
In der SQL*Plus-Umgebung können Sie eine Transaktionssteueranweisung nach der Aufforderung SQL> eingeben.
In der SQL Developer-Umgebung können Sie eine Transaktionskontrollanweisung in das Arbeitsblatt eingeben. SQL Developer verfügt auch über die Symbole "Änderungen festschreiben" und "Änderungen zurücksetzen", die unter "Transaktionen festschreiben" und "Transaktionen zurücksetzen" erläutert werden.
Achtung:
Wenn Sie eine Transaktion nicht ausdrücklich festschreiben, das Programm aber anormal beendet wird, erfolgt automatisch ein Rollback der letzten nicht festgeschriebenen Transaktion in der Datenbank.
Oracle empfiehlt daher, dass Transaktionen in Anwendungsprogrammen ausdrücklich beendet werden, indem sie entweder festgeschrieben oder durch Rollback aufgehoben werden.
Siehe:
-
Oracle AI Database Concepts für weitere Informationen zum Transaktionsmanagement
-
Oracle AI Database SQL Language Reference für weitere Informationen zu Transaktionskontrollanweisungen
Transaktionen festschreiben
Durch das Festschreiben einer Transaktion wird die Änderung dauerhaft übernommen, ihre Savepoints gelöscht und ihre Sperren aufgehoben.
Um eine Transaktion explizit festzuschreiben, verwenden Sie entweder die Anweisung COMMIT oder (in der SQL Developer-Umgebung) das Symbol Änderungen festschreiben.
Hinweis: Oracle AI Database gibt eine implizite COMMIT-Anweisung vor und nach jeder Datendefinitionssprachen-(DDL-)Anweisung ab. Informationen zu DDL-Anweisungen finden Sie unter "Info zu Datendefinitionssprachen-(DDL-)Anweisungen".
Bevor Sie eine Transaktion festschreiben:
-
Ihre Änderungen werden Ihnen angezeigt, jedoch nicht den anderen Benutzern der Datenbankinstanz.
-
Ihre Änderungen sind noch nicht endgültig. Sie können sie mit der Anweisung ROLLBACK rückgängig machen.
Nachdem Sie eine Transaktion festgeschrieben haben:
-
sind Ihre Änderungen für andere Benutzer und ihre Anweisungen sichtbar, die ausgeführt werden, nachdem Sie Ihre Transaktion festgeschrieben haben.
-
Ihre Änderungen sind endgültig. Sie können sie nicht mit der Anweisung ROLLBACK rückgängig machen.
Beispiel 3-1 fügt eine Zeile zur Tabelle REGIONS (eine sehr einfache Transaktion) hinzu. Das Ergebnis wird geprüft, und dann wird die Transaktion festgeschrieben.
Beispiel 3-1: Transaktion festschreiben
Vor der Transaktion:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
4 rows selected.
Transaktion (Zeile zu Tabelle hinzufügen):
INSERT INTO regions (region_id, region_name) VALUES (5, 'Africa');
Ergebnis:
1 row created.
Prüfen Sie, ob die Zeile hinzugefügt wurde:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
Schreiben Sie die Transaktion fest:
COMMIT;
Ergebnis:
Commit complete.
Siehe auch: SQL Language Reference für Oracle AI Database für Informationen zur COMMIT-Anweisung
Rollback für Transaktionen durchführen
Durch Rollback einer Transaktion werden deren Änderungen rückgängig gemacht. Sie können ein Rollback der gesamten aktuellen Transaktion ausführen, oder Sie können das Rollback nur bis zu einem angegebenen Savepoint ausführen.
Um einen ROLLBACK der aktuellen Transaktion nur bis zu einem angegebenen SAVEPOINT durchzuführen, müssen Sie die Anweisung ROLLBACK mit der Klausel TO SAVEPOINT verwenden.
Um die gesamte aktuelle Transaktion zurückzusetzen, verwenden Sie entweder die ROLLBACK-Anweisung ohne die TO SAVEPOINT-Klausel oder (in der SQL Developer-Umgebung) das Symbol Änderungen zurücksetzen.
Rollback der gesamten aktuellen Transaktion:
-
Beendet die Transaktion
-
Macht alle Änderungen der Transaktion rückgängig
-
Löscht alle Savepoints der Transaktion
-
Gibt alle Transaktionssperren frei
Ein Rollback der aktuellen Transaktion nur bis zum angegebenen Savepoint:
-
Beendet die Transaktion nicht
-
Macht nur die Änderungen rückgängig, die nach dem angegebenen Savepoint erfolgt sind
-
Löscht nur die Savepoints, die nach dem angegebenen Savepoint festgelegt wurden (mit Ausnahme des angegebenen Savepoints selbst)
-
Gibt alle Tabellen- und Zeilensperren frei, die nach dem angegebenen Savepoint angefordert wurden
Andere Transaktionen, die einen Zugriff auf Zeilen angefordert haben, die nach dem angegebenen Savepoint gesperrt wurden, müssen warten, bis die Transaktion entweder festgeschrieben oder bis ein Rollback der Transaktion ausgeführt wurde. Andere Transaktionen, die die Zeilen nicht angefordert haben, können die Zeilen sofort anfordern und darauf zugreifen.
Um die Auswirkungen eines Rollbacks in SQL Developer anzuzeigen, müssen Sie möglicherweise auf das Symbol Aktualisieren klicken.
Als Ergebnis des Beispiels in Beispiel 3-1 verfügt das REGIONS über eine Region namens "Middle East and Afrika" und eine Region namens "Africa". Beispiel 3-2 korrigiert dieses Problem (eine sehr einfache Transaktion) und überprüft die Änderung, führt dann jedoch ein Rollback der Transaktion aus und überprüft das Rollback.
Beispiel 3-2: Rollback einer gesamten Transaktion ausführen
Vor der Transaktion:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
Transaktion (Tabelle ändern):
UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';
Ergebnis:
1 row updated.
Änderung überprüfen:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
Rollback der Transaktion ausführen:
ROLLBACK;
Ergebnis:
Rollback complete.
Rollback überprüfen:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
Siehe auch: Oracle AI Database SQL Language Reference für Informationen zur ROLLBACK-Anweisung
Savepoints in Transaktionen festlegen
Die Anweisung SAVEPOINT markiert einen SAVEPOINT in einer Transaktion. Dies ist ein Punkt, zu dem Sie später einen Rollback durchführen können. Savepoints sind optional, und eine Transaktion kann mehrere Savepoints haben. In Beispiel 3-3 wird eine Transaktion ausgeführt, die mehrere DML-Anweisungen und mehrere Savepoints enthält. Dadurch gehen nur Änderungen, die nach diesem Savepoint durchgeführt wurden, rückgängig.
Beispiel 3-3: Rollback einer Transaktion zu einem Savepoint ausführen
Tabelle REGIONS vor der Transaktion prüfen:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
Länder in Region 4 vor Transaktion prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Egypt EG 4
Israel IL 4
Kuwait KW 4
Nigeria NG 4
Zambia ZM 4
Zimbabwe ZW 4
6 rows selected.
Länder in Region 5 vor Transaktion prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;
Ergebnis:
no rows selected
Transaktion mit mehreren Savepoints:
UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';
UPDATE COUNTRIES
SET REGION_ID = 5
WHERE COUNTRY_ID = 'ZM';
SAVEPOINT zambia;
UPDATE COUNTRIES
SET REGION_ID = 5
WHERE COUNTRY_ID = 'NG';
SAVEPOINT nigeria;
UPDATE COUNTRIES
SET REGION_ID = 5
WHERE COUNTRY_ID = 'ZW';
SAVEPOINT zimbabwe;
UPDATE COUNTRIES
SET REGION_ID = 5
WHERE COUNTRY_ID = 'EG';
SAVEPOINT egypt;
Tabelle REGIONS nach der Transaktion prüfen:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
Länder in Region 4 nach Transaktion prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Israel IL 4
Kuwait KW 4
2 rows selected.
Länder in Region 5 nach Transaktion prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Egypt EG 5
Nigeria NG 5
Zambia ZM 5
Zimbabwe ZW 5
4 rows selected.
ROLLBACK TO SAVEPOINT nigeria;
Tabelle REGIONS nach Rollback prüfen:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Ergebnis:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
Länder in Region 4 nach Rollback prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Egypt EG 4
Israel IL 4
Kuwait KW 4
Zimbabwe ZW 4
4 rows selected.
Länder in Region 5 nach Rollback prüfen:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;
Ergebnis:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Nigeria NG 5
Zambia ZM 5
2 rows selected.
Siehe auch: Oracle AI Database SQL Language Reference für Informationen zur SAVEPOINT-Anweisung