3.4.3 排他の期間
- 〈この項の構成〉
(1) 排他の開始と解放
1トランザクションがある資源に対して排他を掛けると,一般にコミット,又はロールバックをするまで資源を占有します。例えば,ある排他資源(行,又はページ)に対して更新処理を掛けるとEXモードになるため,更新中の行に対するほかのトランザクション処理は,コミット,又はロールバックをするまですべて待ち状態になります。ただし,LOCK文でUNTIL DISCONNECT指定がある場合,その資源の排他は,DISCONNECT時,又はそのテーブル削除後のコミットまで保持されます。
なお,通常,行の削除処理をするとトランザクション完了まで排他は保持していますが,データベースから行がなくなるため,ほかのトランザクションの検索処理は削除中の行で排他待ちになりません。排他待ちをさせたい場合は,「コミットしていない削除データの排他制御」を参照してください。
(2) 排他時の参照
ある資源に排他制御が掛かると,通常はコミット,又はロールバックをするまで資源は解放されません。しかし,WITHOUT LOCKを指定したSQL文の検索では,参照済みの排他資源(行又はページ)の排他は解除されます。また,論理ファイルを参照する場合を除き,WITHOUT LOCK NOWAITを指定したSQL文の検索では,ほかのトランザクションが表や行にEXモードで排他を掛けているときでも,排他なしと同じ状態として参照できます。ただし,pdload及びpdrorgでアクセス中の表は参照できません。pdload及びpdrorgについては,マニュアル「HiRDB コマンドリファレンス」を参照してください。
なお,WITHOUT LOCK NOWAITを指定したSQL文の検索では,更新中でも参照できるため,参照時の結果と更新後の結果が必ずしも一致しないので注意が必要です。