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

MySQL InnoDB:`FORUPDATE`と`LOCKINSHAREMODE`の違い

    私はこの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ずつ増加します。



    1. MySQL:ゼロフィルを使用せずに表示幅を指定する理由

    2. QMYSQLドライバーがWindowsにロードされていません

    3. mysql selectを書き換えて時間を短縮し、tmpをディスクに書き込みます

    4. SQL ServerでのOBJECTPROPERTY()のしくみ