select for update

select * from tab1 where col1 = 1 for update;

select * from tab1 where col1 = 1 for update;

行および関連付けられたすべてのエントリをロックします。
この動作は、これらの行に UPDATE ステートメントを発行した場合と同じです。


select * from tab1 where col1 = 1 lock in share mode;

読み取られるすべての行に共有モードのロックを設定します。
ほかのセッションもその行を読み取ることができますが、
トランザクションがコミットするまで変更することはできません。

 

select * from tab1 where col1 = 1 for UPDATE;
select * from tab1 where col1 = 1 for NO KEY UPDATE;
select * from tab1 where col1 = 1 for SHARE;
select * from tab1 where col1 = 1 for KEY SHARE;

 

http://d.hatena.ne.jp/lpczclt/20080813/1218628250
https://docs.microsoft.com/ja-jp/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017

select * from tab1 WITH (UPDLOCK,ROWLOCK) where col1 = 1;

更新可能なリソースに使用します。 複数のセッションがリソースを読み取り、ロックして、
後で更新する可能性がある場合に発生する一般的な形式のデッドロックを防ぎます。


select * from tab1 WITH (XLOCK,ROWLOCK) where col1 = 1;

INSERT、UPDATE、DELETE などのデータ変更操作に使用します。
複数の更新操作により 1 つのリソースを同時に更新しないようにするためのロック モードです。