LOCK-Anweisung (lock_statement)
Die LOCK-Anweisung (
lock_statement) ordnet der aktuellen Transaktion eine Sperre zu.Syntax
<lock_statement> ::=
LOCK [(WAIT)|(NOWAIT)] <lock_spec> IN SHARE MODE
LOCK [(WAIT)|(NOWAIT)] <lock_spec> IN EXCLUSIVE MODE
LOCK [(WAIT)|(NOWAIT)] <lock_spec> IN SHARE MODE <lock_spec> IN EXCLUSIVE MODE
LOCK [(WAIT)|(NOWAIT)] <row_spec>... OPTIMISTIC
<lock_spec> ::= TABLE <table_name>,... | <row_spec>...
| TABLE <table_name>,... <row_spec>...
Erläuterung
Die angegebene Tabelle darf keine temporäre Basistabelle, keine View-Tabelle (siehe
Tabelle) und kein Synonym sein. Wenn der Tabellenname eine View-Tabelle identifiziert, werden Sperren auf die Basistabellen gesetzt, die der View-Tabelle zugrundeliegen.WAIT/NOWAIT
<row_spec>...
Bei Angabe von
<row_spec>... wird eine Sperre für die durch die Schlüsselwerte oder durch einen Standpunkt in einer Ergebnistabelle bezeichnete Zeile einer Tabelle angelegt.Die Angabe einer
row_spec erfordert, daß die angegebene Tabelle eine Schlüsselspalte besitzt, d. h. falls durch den Tabellennamen eine View-Tabelle angegeben ist, muß diese änderbar sein.TABLE <table_name>,...
Bei Angabe von
TABLE <table_name>,... wird eine Sperre für die genannte Tabelle angelegt.Wenn der Tabellenname eine nicht änderbare View-Tabelle identifiziert, ist nur das Setzen einer
Lesesperre für diese View-Tabelle möglich. Als Folge dieser SQL-Anweisung sind anschließend für alle Basistabellen, die der View-Tabelle zugrundeliegen, Lesesperren gesetzt.SHARE
SHARE definiert eine
Lesesperre für die aufgeführten Objekte. Zum Setzen von Lesesperren muß der aktuelle Benutzer das SELECT-Privileg besitzen.EXCLUSIVE
EXCLUSIVE definiert eine
Schreibsperre für die aufgeführten Objekte. Zum Setzen von Schreibsperren muß der aktuelle Benutzer das UPDATE-, DELETE- oder INSERT-Privileg besitzen.OPTIMISTIC
OPTIMISTIC definiert eine
optimistische Sperre auf Zeilen. Diese ist nur in Zusammenhang mit den Isolation-Levels 0, 1, 10 und 15 sinnvoll.Deadlock
Erkennt das Datenbanksystem einen durch Sperren verursachten Deadlock, so wird die Transaktion durch ein implizites ROLLBACK WORK beendet.
Reproduzierbarkeit
Werden für das Lesen von Zeilen mittels einer SELECT-Anweisung reproduzierbare Ergebnisse gewünscht, müssen die gelesenen Objekte gesperrt werden, und die Sperren müssen bis zur Reproduktion gehalten werden. Für die Reproduzierbarkeit ist es im allgemeinen erforderlich, die betroffenen Tabellen explizit mittels eines oder mehrerer LOCK-Anweisungen oder implizit durch Verwendung des
Isolation-Level 3 lesend zu sperren. Dadurch wird gewährleistet, daß kein anderer Benutzer die Tabelle ändern kann.Siehe auch:
Sperrverhalten