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

CRUD操作を妨げる行を排他的にロックする方法

    BEGIN TRAN
    
        SELECT 1
        FROM Table
        WITH (XLOCK, ROWLOCK)
    
    COMMIT TRAN
    

    編集

    他の人が指摘したように、行を読み取らないようにロックすることはできません .私が知っている唯一の方法は次のとおりです:

    WITH (UPDLOCK, TABLOCK)
    

    これは、WITH (NOLOCK) が SELECT ステートメントで使用されていないことを前提としています (とにかく避ける必要があります)。

    TABLOCK は極端な場合にのみ使用する必要がありますが、これをテストしたところ動作します。確かに、並行性が必要な場合、それは悪い解決策であり、他の形式のロックが必要になります。 1 つの方法は、ビット列 "Available True/False" を更新し、Available =True の行のみを読み取ることです。 @gbn が提案したように、READPAST できる



    1. Moodleデータベースのスケールアウト

    2. ER_HOST_NOT_PRIVILEGED-Dockerコンテナがmariadbに接続できません

    3. 列をソート用の別のタイプとして扱います

    4. ローカルホストPHPアプリケーションからのHerokuPostgres接続