分離によって、データベースシステムで、いつ、どのロックが設定されるかを設定することができます。
より多数のロックが、より長い時間設定されると、それだけデータベース操作中の並列度が低くなります。設定されるロックの数が少ないと、それだけ多くの現象が発生し、保証される整合性の度合も低くなります。
分離レベル
番号設定 |
名称 |
内容 |
0 |
コミットされない読込 |
データベースシステムでは、共有ロックをリクエストすることなく行が読み込まれます。 同一のトランザクション内で再び行が読み込まれる場合、前回読込時以降に他のトランザクションによって行が変更されている可能性があるため、最初の読込時の状態と同じである保証はありません。 また、読み込んだ行の状態が、データベースシステムで COMMIT によって保存される保証もありません。場合によっては、読み込んだ値がデータベースシステムによって保存されず、反対に ROLLBACK によって以前の値にリセットされることもあります。 行の挿入、更新、または削除を行う場合には、データベースシステムによって、トランザクション中に影響を受ける行に対して暗黙的に排他ロックが設定されます。これらのロックは、トランザクションが終了したときにのみデータベースシステムによってリリースされます。 |
1 または 10 |
コミットされた読込 |
行の読込時に、読み込む各行に対して他のトランザクションが排他ロックを保持していないことが、データベースシステムによって保証されます。 行の挿入、変更、または削除を行う場合には、対象の行に対して、対応するトランザクションの排他ロックがデータベースによって暗黙的に設定されます。このロックは、トランザクション終了まではリリースされません。 |
15 |
|
分離レベル 1 で説明されている動作に加えて、処理の開始前に、SQL 文で処理対象となるすべてのテーブルに対して、データベースシステムによって共有ロックがリクエストされます。 永続的に保存されない結果テーブルが SQL 文によって生成される場合、これらのロックは、トランザクションの終了時まで、または結果テーブルが閉じられるまではデータベースシステムによってリリースされません。そうでない場合は、ロックは、SQL 文の処理が終了すると即座にリリースされます。 |
2 または 20 |
反復可能読取り |
分離レベル 1 で説明されている動作に加えて、処理の開始前に、SQL 文で処理対象となるすべてのテーブルに対して、暗黙的に共有ロックがリクエストされます。 永続的に保存されない結果テーブルが SQL 文によって生成される場合、これらのロックは、トランザクションの終了時まで、または結果テーブルが閉じられるまではデータベースシステムによってリリースされません。そうでない場合は、ロックは、SQL 文の処理が終了すると即座にリリースされます。 テーブル内の、キーによって特定される、または CURRENT OF <result_table_name> を使用して特定される単一の行のみが処理される SQL 文では、データベースシステムによってトランザクションにテーブル共有ロックは割り当てられません。 さらに、SQL 文の処理中に読み込まれる各行に対して、トランザクションの共有ロックがデータベースシステムによって暗黙的に割り当てられます。これらのロックは、UNLOCK 文を使用するか、またはトランザクションを終了することによってのみリリースすることができます。 行の挿入、変更、または削除を行う場合には、影響を受ける行の排他ロックが、トランザクションに対してデータベースシステムによって暗黙的に割り当てられます。このロックは、トランザクション終了時まではリリースされません。ただし、テーブル全体へのロックは割り当てられません。 |
3 または 30 |
直列化可能 |
分離レベル 2 で説明されている動作に加えて、SQL 文で処理対象となる各テーブルのテーブル共有ロックが、トランザクションに暗黙的に割り当てられます。 これらの共有ロックは、トランザクションを終了することによってのみリリースすることができます。テーブル内の、キーによって特定される、または CURRENT OF <result_table_name> を使用して特定される単一の行のみが処理される SQL 文が実行されるトランザクションには、このテーブル共有ロックは割り当てられません。 行の挿入、変更、または削除を行う場合には、影響を受ける行の排他ロックが、トランザクションに対してデータベースシステムによって暗黙的に割り当てられます。このロックは、トランザクション終了時まではリリースされません。 |
1 と 10 は、同じ分離レベルを異なる数字で表したものです。意味はまったく同じです。2 と 20、および 3 と 30 についても同様です。
分離値のデフォルト値は、SQL モードに応じて異なります。
● ANSI: 3
● その他すべて: 1
CONNECT 文を使用してデータベースセッションを開くとき、または個々の SQL 文で、分離レベルを上書きすることができます。
参照: SQL 参照マニュアル、
ローダセッションでは、SET コマンドを使用して分離レベルを設定することができます。個々のユーザに対しては、USE USER コマンドを使用して分離レベルを上書きすることができます。また、EXPORT COLUMNS コマンドでは、SELECT 文に LOCK オプションを付けることで、必要な分離レベルを指定することができます。
参照: ローダ、