「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL でオプティミスティック ロックを実装するにはどうすればよいですか?

MySQL でオプティミスティック ロックを実装するにはどうすればよいですか?

2024 年 11 月 7 日に公開
ブラウズ:981

How Can Optimistic Locking be Implemented in MySQL?

MySQL のオプティミスティック ロック: 包括的な説明

オプティミスティック ロックは、次のような場合に発生する可能性のあるデータの競合を防ぐためにデータベース管理システムで採用されている技術です。複数のユーザーが同じデータを同時に更新しようとします。 MySQL はオプティミスティック ロックをネイティブにサポートしていませんが、標準 SQL 命令を使用して実装できます。

概念を理解する

オプティミスティック ロックは、データがオプティミスティック ロックを実行する可能性が低いという前提で動作します。複数のユーザーによって頻繁に変更される可能性があります。データのロックを取得する代わりに、この手法では同時更新が可能ですが、変更をコミットする前に競合がないかチェックします。

MySQL での実装

オプティミスティックを実装する 1 つの方法MySQL でのロックは、テーブルにバージョン列を追加することによって行われます。行が更新されると、バージョン列が増加します。更新をコミットする前に、アプリケーションは現在のバージョン番号が、更新の開始時に行に格納されていたバージョン番号と一致することを確認します。数値が一致する場合、更新はコミットされます。それ以外の場合、競合が発生しているため、アプリケーションは競合を適切に処理する必要があります。

コード例

次のコード スニペットは、バージョン列を使用したオプティミスティック ロックを示しています。

-- Select the row and its version
SELECT val1, val2, version
FROM theTable
WHERE iD = @theId;

-- Calculate new values
-- ...

-- Update the table, checking the version
UPDATE theTable
SET val1 = @newVal1,
    val2 = @newVal2,
    version = version   1
WHERE iD = @theId
    AND version = @oldversion;

-- Check for affected rows
IF @@ROWCOUNT = 1
    -- Commit the changes
    -- ...
ELSE
    -- Handle collision
    -- ...
END IF;

トランザクションと非トランザクション

オプティミスティック ロックは、トランザクションの有無にかかわらず実装できます。トランザクションを使用すると、衝突が発生した場合にすべての変更をロールバックできますが、同時実行の制限も発生する可能性があります。非トランザクションのオプティミスティック ロックはバージョン列に依存して競合を検出し、トランザクションを必要とせずに競合を処理します。

結論

オプティミスティック ロックは組み込みではありません。 MySQL の機能ですが、標準の SQL 命令を使用して実装できます。テーブルにバージョン列を追加することで、アプリケーションはオプティミスティック ロックを実行し、更新をコミットする前に競合を検出して、同時環境でのデータの一貫性を確保できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3