MySQL のオプティミスティック ロック: 詳細
データベースの同時更新を管理するために採用されるテクニックであるオプティミスティック ロックは、ネイティブではサポートされていませんMySQLによる。ただし、データベースの実践方法とアプリケーション コードを組み合わせることで実装できます。
オプティミスティック ロックの仕組み
オプティミスティック ロックの背後にある原則は、データがロックされないことを前提としています。同時更新中に競合が発生します。更新前にデータの整合性をチェックすることで、競合の検出が可能になり、適切なアクションを実行できるようになります。
トランザクションがない場合、UPDATE の前に追加の SELECT ステートメントを含めることにより、楽観的ロックが適用されます。この SELECT ステートメントはデータの現在の状態を取得し、更新が試行される前の状態と比較します。データが変更された場合、更新は中止され、データの整合性が維持されます。
MySQL でのオプティミスティック ロックの使用
MySQL でオプティミスティック ロックを実装するには、次の手順を実行できます。アプリケーション コードで実行されます:
例
次の例を考えてみましょう。
<code class="sql">SELECT val1, val2 FROM theTable WHERE iD = @theId; -- Perform data calculations UPDATE theTable SET val1 = @newVal1, val2 = @newVal2 WHERE iD = @theId AND val1 = @oldVal1 AND val2 = @oldVal2; -- Check the number of affected rows IF @@ROWCOUNT = 1 -- Update successful ELSE -- Conflict detected END</code>
代替のオプティミスティック ロック方法
SELECT-UPDATE-CHECK アプローチとは別に、バージョン列を使用してオプティミスティック ロックを実装することもできます。この列はデータが更新されるたびに増分され、UPDATE ステートメントは行を更新する前にバージョンをチェックします。バージョンが一致しない場合、更新は中止されます。
考慮事項
オプティミスティック ロックは、競合がまれであり、競合を検出するコストがペシミスティックを使用するよりも低いことを前提としています。ロック(トランザクションなどによる)。ただし、同時実行性が高く、データの整合性が重要であるシナリオには適さない可能性があります。
以上がネイティブ サポートなしで MySQL にオプティミスティック ロックを実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。