Eine atomare Anweisung wird entweder komplett oder gar nicht ausgeführt. Beispiel: Eine UPDATE-Anweisung, die Tausende von Zeilen aktualisiert, kann nach den ersten aktualisierten Zeilen auf einen Fehler stoßen. Wenn die Anweisung nicht abgeschlossen werden kann, werden alle bisher geänderten Zeilen wieder auf den Ausgangsstatus zurückgesetzt. Die UPDATE-Anweisung ist atomar.
Alle nicht zusammengesetzten SQL-Anweisungen sind atomar. Eine zusammengesetzte Anweisung kann atomar gemacht werden, indem nach dem Schlüsselwort BEGIN das Schlüsselwort ATOMIC angehängt wird.
BEGIN ATOMIC UPDATE Employees SET ManagerID = 501 WHERE EmployeeID = 467; UPDATE Employees SET BirthDate = 'bad_data'; END |
In diesem Beispiel sind die beiden Aktualisierungsanweisungen Teil einer atomaren zusammengesetzten Anweisung. Sie können nur als Gesamtheit gelingen oder fehlschlagen. Die erste Aktualisierungsanweisung wird erfolgreich verlaufen. Die zweite verursacht einen Datenkonvertierungsfehler, da der der Spalte "BirthDate" zugewiesene Wert nicht in ein Datum umgewandelt werden kann.
Die atomare zusammengesetzte Anweisung schlägt fehl, und die Wirkung beider UPDATE-Anweisungen wird annulliert. Auch wenn die derzeit gerade ausgeführte Transaktion festgeschrieben wird, werden die Anweisungen in einer atomaren zusammengesetzten Anweisung nicht wirksam.
Wenn eine atomare zusammengesetzte Anweisung erfolgreich ist, werden die innerhalb der zusammengesetzten Anweisung durchgeführten Änderungen nur wirksam, wenn die derzeit ausführende Transaktion festgeschrieben wird. Für den Fall, dass eine atomare zusammengesetzte Anweisung erfolgreich ist, die Transaktion, in der sie vorkommt, jedoch zurückgesetzt wird, so wird die atomare zusammengesetzte Anweisung ebenfalls zurückgesetzt. Am Anfang der atomaren zusammengesetzten Anweisung wird ein Savepoint eingerichtet. Alle Fehler innerhalb der Anweisung führen zum Zurücksetzen zu diesem Savepoint.
Wenn eine atomare zusammengesetzte Anweisung im Autocommit-Modus (unverkettet) ausgeführt wird, ändert sich der Festschreibemodus auf manuell (verkettet), bis die Anweisungsausführung abgeschlossen ist. Im manuellen Modus bewirken DML-Anweisungen, die innerhalb einer atomaren zusammengesetzten Anweisung ausgeführt werden, kein sofortiges COMMIT oder ROLLBACK. Wenn die atomare zusammengesetzte Anweisung erfolgreich abschließt, wird eine COMMIT-Anweisung ausgeführt, ansonsten wird eine ROLLBACK-Anweisung ausgeführt.
COMMIT und ROLLBACK sowie einige ROLLBACK TO SAVEPOINT-Anweisungen können nicht in einer atomaren zusammengesetzten Anweisung verwendet werden.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |