2.4.3 排他の取得期間
(1) 同じ行を同時に更新するトランザクションがある場合
同じ行を同時に更新するトランザクションがある場合の例を次の図に示します。
図2-10 同じ行を同時に更新するトランザクションがある場合の例
![[図データ]](figure/zu020140.gif)
- 説明
- スレッド2によるA行の更新処理中に,スレッド1がA行を更新しようとしたため,スレッド1はエラーとなり,トランザクションがロールバックします。
- スレッド2によるA行の更新確定後(DBエリアへの反映確定後)に,スレッド3によるA行の更新処理が開始されたため,スレッド3はA行を更新できます。
- 同一行に対するコミット処理は同時実行できません。そのため,スレッド2のコミット処理が完了したあとに,スレッド3のコミット処理が開始されます。
(2) 同じ行を更新するトランザクションと参照するトランザクションがある場合
同じ行を更新するトランザクションと参照するトランザクションがある場合の例を次の図に示します。
図2-11 同じ行を更新するトランザクションと参照するトランザクションがある場合の例
![[図データ]](figure/zu020150.gif)
- 説明
- スレッド1がA行の更新を行い,スレッド2がA行を参照しています。
- この場合,スレッド1の更新確定前後(DBエリアへの反映確定前後)で,スレッド2が取り出す値が変わります。