資源の競合が起きた場合に、どのタイミングまで占有待ちとなるのかは、トランザクションモードの指定によって異なります。以下に、トランザクションモードの指定と資源の占有について示します。
| 先行トランザクション | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
独立性水準 | SERIALIZABLE | READ COMMITTED | READ UNCOMMITTED | ||||||||||||
SQL文の種類 | SELECT | INSERT | UPDATE | DELETE | SELECT | INSERT | UPDATE | DELETE | SELECT | INSERT | UPDATE | DELETE | |||
後続トランザクション | 独立性水準 | SQL文 |
|
| |||||||||||
SERIALIZABLE | SELECT |
| ○ | × | × | × | ○ | × | × | × | ○ | × | × | × | |
INSERT | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
UPDATE | × | × | × | × | △ | × | × | × | ○ | × | × | × | |||
DELETE | × | × | × | × | △ | × | × | × | ○ | × | × | × | |||
READ UNCOMMITTED | SELECT | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||
INSERT | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
UPDATE | × | × | × | × | △ | × | × | × | ○ | × | × | × | |||
DELETE | × | × | × | × | △ | × | × | × | ○ | × | × | × |
○ : 待つことなく動作する
△ : 先行トランザクションのSQL文が以下のいずれかの場合は、先行トランザクションのSQL文の終了を待つ
単一行SELECT文
更新可能性句に、FOR READ ONLYを指定したカーソルのOPEN文
トランザクションアクセスモードが読込み専用モードのときのOPEN文
× : トランザクションの終了を待つ
| 先行トランザクション | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
独立性水準 | SERIALIZABLE | READ COMMITTED | READ UNCOMMITTED | ||||||||||||
SQL文の種類 | SELECT | INSERT | UPDATE | DELETE | SELECT | INSERT | UPDATE | DELETE | SELECT | INSERT | UPDATE | DELETE | |||
後続トランザクション | 独立性水準 | SQL文の種類 |
|
| |||||||||||
SERIALIZABLE | SELECT |
| ○ | × | × | × | ○ | × | × | × | ○ | × | × | × | |
INSERT | × | × | × | × | △ | × | × | × | ○ | × | × | × | |||
UPDATE | × | × | × | × | △ | × | × | × | ○ | × | × | × | |||
DELETE | × | × | × | × | △ | × | × | × | ○ | × | × | × | |||
READ UNCOMMITTED | SELECT | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||
INSERT | × | × | × | × | △ | × | × | × | ○ | × | × | × | |||
UPDATE | × | × | × | × | △ | × | × | × | ○ | × | × | × | |||
DELETE | × | × | × | × | △ | × | × | × | ○ | × | × | × |
○ : 待つことなく動作する
△ : 先行トランザクションのSQL文が以下のいずれかの場合は、先行トランザクションのSQL文の終了を待つ
単一行SELECT文
更新可能性句に、FOR READ ONLYを指定したカーソルのOPEN文
トランザクションアクセスモードが読込み専用モードのときのOPEN文
× : トランザクションの終了を待つ
先行トランザクションがカーソルのOPEN文を実行した場合は、カーソル宣言の更新可能性句の指定によって占有待ちの制御が異なります。
更新可能性句がREAD ONLYの場合は、SELECT文と同じになります。更新可能性句がFOR UPDATEの場合は、UPDATE文と同じになります。