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

SQL Serverで行レベルのロックを強制することは可能ですか?

    ROWLOCKヒントを使用できますが、リソースが不足している場合、AFAIKSQLはそれをエスカレーションすることを決定する場合があります

    ドコから:

    ROWLOCKページまたはテーブルのロックが通常行われるときに行ロックが行われることを指定します。 SNAPSHOTisolationレベルで動作する指定されたトランザクションでは、ROWLOCKがUPDLOCKやHOLDLOCKなどのロックを必要とする他のテーブルヒントと組み合わされない限り、行ロックは行われません。

    および

    行レベルのロックを取得するロックヒントROWLOCK、UPDLOCK、およびXLOCKは、実際のデータ行ではなくインデックスキーにロックを配置する場合があります。たとえば、atableに非クラスター化インデックスがあり、ロックヒントを使用するSELECTステートメントがカバーリングインデックスによって処理される場合、ロックはベーステーブルのデータ行ではなくカバーリングインデックスのインデックスキーで取得されます。

    そして最後に、これにより、SQLServer2008で変更されたSQLServer2005のロックエスカレーションについてかなり詳細に説明されます。

    また、非常に詳細な情報もあります。データベースエンジンのロック(オンラインの書籍)

    したがって、一般的に

    UPDATE
    Employees WITH (ROWLOCK)
    SET Name='Mr Bean'
    WHERE Age>93
    

    大丈夫なはずですが、インデックスとサーバーの負荷によっては、ページロックにエスカレートする可能性があります。



    1. 内部クエリを使用したORDERBY、ORA-00907に右括弧がありません

    2. MariaDBで日付に日を追加する8つの方法

    3. SQLServerレプリケーションのトラブルシューティング

    4. Android MVVMアーキテクチャのLiveDataリストから最初の要素または(任意の)要素を取得する方法は?