Varianten von READ COMMITTED
Für READ COMMITTED
-Transaktionen kann je nach Art der gewünschten Konfliktlösung einer von zwei modifizierenden Parametern angegeben werden: RECORD_VERSION
und NO RECORD_VERSION
.Wie die Namen vermuten, schließen sie sich gegenseitig aus.
-
NO RECORD_VERSION
(der Standardwert) ist eine Art Zwei-Phasen-Sperrmechanismus: Er macht die Transaktion nicht in der Lage, in eine Zeile zu schreiben, für die eine Aktualisierung von einer anderen Transaktion aussteht.-
Wenn
NO WAIT
die angegebene Lock-Resolution-Strategie ist, wird sofort ein Lock-Konflikt-Fehler ausgegeben -
Wenn
WAIT
angegeben ist, wird gewartet, bis die andere Transaktion entweder festgeschrieben oder zurückgesetzt wird.Wenn die andere Transaktion zurückgesetzt oder festgeschrieben wird und ihre Transaktions-ID älter ist als die ID der aktuellen Transaktion, ist die Änderung der aktuellen Transaktion zulässig.Ein Sperrkonfliktfehler wird zurückgegeben, wenn die andere Transaktion festgeschrieben wurde und ihre ID neuer war als die der aktuellen Transaktion.
-
-
Wenn
RECORD_VERSION
angegeben ist, liest die Transaktion die letzte festgeschriebene Version der Zeile, unabhängig von anderen ausstehenden Versionen der Zeile.Die Lock-Resolution-Strategie (WAIT
oderNO WAIT
) beeinflusst das Verhalten der Transaktion beim Start in keiner Weise. -
Bei Angabe von
READ CONSISTENCY
(oderReadConsistency = 1
) erhält die Ausführung einer Anweisung einen Snapshot der Datenbank, um ein konsistentes Lesen auf Anweisungsebene der Transaktionen sicherzustellen, die beim Start der Ausführung festgeschrieben wurden.Die anderen beiden Varianten können zu inkonsistenten Lesevorgängen auf Anweisungsebene führen, da sie möglicherweise einige, aber nicht alle Änderungen einer gleichzeitigen Transaktion lesen, wenn diese Transaktion während der Anweisungsausführung festgeschrieben wird.Beispielsweise könnte ein
SELECT COUNT(*)
einige, aber nicht alle eingefügten Datensätze einer anderen Transaktion lesen, wenn der Commit dieser Transaktion erfolgt, während die Anweisung Datensätze liest.Diese Momentaufnahme auf Anweisungsebene wird für die Ausführung einer Anweisung der obersten Ebene abgerufen, verschachtelte Anweisungen (Trigger, gespeicherte Prozeduren und Funktionen, dynamische Anweisungen usw.) verwenden die Momentaufnahme auf Anweisungsebene, die für die Anweisung der obersten Ebene erstellt wurde.
Note
|
Einen Snapshot für |
Caution
|
Die Einstellung |