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

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

2024 年 11 月 4 日に公開
ブラウズ:905

How can I implement Optimistic Locking in MySQL?

MySQL のオプティミスティック ロックについて

オプティミスティック ロックは、複数のユーザーが同じデータを更新しようとしたときに競合を防ぐのに役立つプログラミング手法です。データベース。 MySQL はオプティミスティック ロックをネイティブにサポートしていませんが、標準 SQL ステートメントを使用して実装できます。

オプティミスティック ロックの実装

通常、オプティミスティック ロックは既知のメカニズムを通じて実現されます。バージョンチェックとして。これには、データが最初に取得されてから別のユーザーによって変更されているかどうかを確認することが含まれます。このチェックは、更新を適用する前に実行され、データの最新バージョンが変更されていることを確認します。

オプティミスティック ロックを実装する手順

MySQL でオプティミスティック ロックを実装するには

  1. データの選択: SELECT ステートメントを使用して、更新するデータを取得します。
  2. 更新された値の計算: 必要な計算を実行して、データの更新された値を決定します。
  3. バージョン チェックによるデータの更新: UPDATE ステートメントを使用してデータを更新しますが、チェックを行う WHERE 句を含めます。データの現在のバージョンがステップ 1 で取得したバージョンと一致する場合。
  4. Check Affected Rows: UPDATE ステートメントを実行した後、影響を受ける行の数を確認します (例: SELECT ROW_COUNT( を使用) ))。 1 行が影響を受けた場合、更新は成功しました。
  5. ハンドル競合: 影響を受けた行が 0 行もなければ、データが別のユーザーによって変更されたことを意味します。エラー メッセージを表示したり、データベースからデータを更新したりするなど、アプリケーション ロジックでこの競合を適切に処理してください。

例は次のとおりです。 MySQL でのオプティミスティック ロックの実装:

# Select data
SELECT id, name, version
FROM users
WHERE id = 1;

# Calculate updated values
new_name = 'John Doe'
new_version = version   1

# Update data with version check
UPDATE users
SET name = @new_name,
    version = @new_version
WHERE id = 1
  AND version = @old_version;

# Check affected rows
SELECT ROW_COUNT() AS affected_rows;

# Handle conflict
IF affected_rows = 0
  BEGIN
    -- Conflict occurred
    -- Handle the conflict here
  END;
ELSE
  BEGIN
    -- Update successful
    -- Continue with the application logic
  END;

バージョン チェックの代替案

バージョン チェックに加えて、次のような楽観的ロックを実装する代替案もあります。

  • タイムスタンプ チェック: タイムスタンプ列を使用してデータの変更をチェックします。
  • フィールド比較: データ内の特定のフィールドを比較して変更を検出します。
最新のチュートリアル もっと>

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

Copyright© 2022 湘ICP备2022001581号-3