この興味深い記事を読んだ後、いくつか質問があります。
次の表は、デッドロックの状況を示しています。
T1 はテーブル t_lock1 の c1=5 のすべての行で X ロックを保持し、T2 はテーブル t_lock2 の C1=1 のすべての行で X ロックを保持します。
これらの各トランザクションは、以前に他のトランザクションによってロックされた行を更新しようとしています。これにより、デッドロックが発生します。
質問1
- トランザクションはロックを取得しますか? テーブルからの読み取りは共有ロックによって行われ、テーブルへの書き込みは排他ロックを使用して行われることを知っています (デフォルトのロック設定について話しています)。
したがって、この例から、トランザクションもロックを保持しているように見えます....それは正しいですか?
質問2
...T1 は、テーブル t_lock1 の c1=5 のすべての行で X ロックを保持しています...
- 私が言ったように、ロックは行ごとではありません(作成することはできますが、作成者は言及していません)-では、なぜ彼は次のように言うのですか:C1=5 のすべての行で?