用語/プロセスを単純化していると思います。クエリが解析されて実行される前に、必要なロックを取得する必要があります。この時点で、次のことが決定されます。
- セッション1は挿入中であり、他にロックがないため、排他ロックを取得します
- 排他ロックはセッション1によってすでに保持されており、セッション2と3は重複キーエラーになっているため、セッション2と3は共有ロックのキューに入れられます
上記のように、セッション2と3は、重複キーエラーが発生しているため、共有ロックのキューに入れられます。ただし、セッション1がキーを削除して排他ロックを解放すると、セッション2と3の両方に共有ロックが付与されます。この時点で、両方が排他ロックを取得して挿入を完了しようとします。ただし、もう一方はすでに共有ロックを保持しているため、どちらもできません。したがって、排他ロックはどちらにも付与されず、デッドロックします。