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

SQL Server でストアド プロシージャの開始時に更新テーブル ロックを取得する

    あなたは言った:

    TXN の間、共有読み取りロックが必要なだけです。これは、他のプロセスが TABLOCK と組み合わせて「書き込み」ロックを取得できないことを意味します。また、COUNT も必要ありません。

    ...
       BEGIN TRANSANCTION
         SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
    ...
    

    なぜ更新ロックが必要だと思いますか?

    HOLDLOCK または SERIALIZABLE

    コメントの後に編集:

    • 「排他ロック」とは、「データを使用する 1 つのプロセスのみ」を意味します。
    • 「SERIALIZABLE」とは、基本的に、ロック (共有、排他など) をより長く保持することを意味します。

    「排他的ロック」を指定することはできませんおよび 他のプロセスが読み取れるようにします。概念は相互に排他的です。 持続したテーブル全体への書き込みを防止したい 共有/読み取りロックで十分です。ここで SERIALIZABLE の出番です。

    「ロック モード」 から

    そのため:共有ロックは書き込みを許可せず、SERIALIZABLE にすることで持続させることができます



    1. OracleDBの引用列名

    2. CakePHP3でINSERTONDUPLICATE KEY UPDATE、別名アップサートを実装するにはどうすればよいですか?

    3. Mysql接続がローカルホストで拒否されました

    4. MYsqlテーブルから一意のキーまたは主キーを削除するためのクエリ