私は現在、トランザクションに取り組んでおり、混乱しています。これらのトランザクションは、データベースのストアド プロシージャではなく、データ アクセス レイヤーで作成されます (SQL Server 2008)。トランザクションに設定された分離レベルの通常の動作を理解しています。次のシナリオで何が起こるべきかを理解できません。
- 取引を開始する
- ID=1 の従業員を選択します。
- ID=1 で従業員を更新します。
- 専念
同じことをしている複数のスレッドがありますが、ID は異なります。しかし、2 つのスレッドで同じ ID を検索する場合があります。それらをスレッド A と B と呼びましょう。上記の手順は、2 つのスレッドに関して次のように進行します。Isolation Level は Repeatable Read に設定されています。
A1. トランザクション A2 を開始します。ID=1 の従業員を選択します。B1. トランザクション B2 を開始します。ID=1 の従業員を選択します。A3. ID=1 で従業員を更新します。A4. B3 をコミットします。ID=1 で従業員を更新します。B4. 専念
このトランザクションから本当に達成したいことは、スレッド A が特定のレコードを選択したときに、スレッド B がそのレコードを選択することさえできないようにすることです。このシナリオでトランザクションとロックを使用することで、正しい軌道に乗っているかどうかはわかりません。
返信待ち:)