私はこの2つの違いを理解しようとしてきました。次の人に役立つことを願って、見つけたものを文書化します。
両方のLOCK IN SHARE MODE
およびFOR UPDATE
他のトランザクションが選択された行を更新できないことを確認してください。 2つの違いは、データの読み取り中にロックを処理する方法にあります。
LOCK IN SHARE MODE
別のトランザクションがロックされた同じ行を読み取ることを妨げません。
FOR UPDATE
同じ行の他のロック読み取りを防止します(非ロック読み取りは引き続きその行を読み取ることができます。LOCK IN SHARE MODE
およびFOR UPDATE
読み取りをロックしています。
これは、あるステートメントで値を読み取り、別のステートメントで値を更新するカウンターの更新などの場合に重要です。ここでは、LOCK IN SHARE MODE
を使用しています 2つのトランザクションが同じ初期値を読み取ることができます。したがって、両方のトランザクションによってカウンターが1ずつ増加した場合、両方のトランザクションが最初に同じ値を読み取るため、終了カウントは1だけ増加する可能性があります。
FOR UPDATE
を使用する 最初のトランザクションが完了するまで、2番目のトランザクションが値を読み取ることをロックします。これにより、カウンターが2ずつ増加します。