sql >> データベース >  >> RDS >> Sqlserver

SELECT/UPDATE でのデッドロック

    これが機能するためにロックをヒントする必要があるシリアル化可能なトランザクションを持つだけでは十分ではありません。

    シリアライズ可能な分離レベルは、通常、シリアライズ可能な条件 (反復可能な読み取り、ファントム行がないなど) が確実に満たされるようにすることができる「最も弱い」タイプのロックを取得します。

    したがって、後で (シリアル化可能なトランザクションで) 更新ロック。 別のスレッドが共有ロックを保持している場合、アップグレードは失敗します (他のスレッドが共有ロックを保持していなければ機能します)。

    おそらく次のように変更する必要があります:

    SELECT * FROM SessionTest with (updlock) WHERE SessionId = @SessionId
      

    これにより、SELECT の実行時に更新ロックが確実に取得されます (したがって、ロックをアップグレードする必要はありません)。




    1. MySQL空間インデックスを使用して5つの最も近いネイバーを取得するための正規化データベースの設計

    2. mysqlストアプロシージャの再帰で深さを取得するにはどうすればよいですか?

    3. RPMプラットフォームでPostgreSQL9.0拡張機能を構築しない方法

    4. Oracle 10gで、ループ内のユーザー入力を受け入れるにはどうすればよいですか?