ホームページ  >  記事  >  データベース  >  MySQL でオプティミスティック ロックを実装するにはどうすればよいですか?

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 17:41:30990ブラウズ

How Can You Implement Optimistic Locking in MySQL?

MySQL のオプティミスティック ロック

オプティミスティック ロックは、複数のユーザーが同じデータを同時に更新することを防ぐために同時実行制御で使用される手法です。競合が発生すると想定し、トランザクションの開始時にデータをロックする悲観的ロックとは異なり、楽観的ロックは競合がまれであることを前提としており、ロックなしで更新を許可します。

MySQL での実装

MySQL では、楽観的ロックをネイティブに実装していません。ただし、標準 SQL 命令とバージョン列アプローチを使用して実装できます。

<code class="sql">CREATE TABLE theTable (
    id INT NOT NULL AUTO_INCREMENT,
    val1 INT NOT NULL,
    val2 INT NOT NULL,
    version INT NOT NULL DEFAULT 0
);</code>

オプティミスティック ロック クエリ:

<code class="sql">UPDATE theTable
SET val1 = @newVal1,
    val2 = @newVal2,
    version = version + 1
WHERE id = @id
AND version = @oldVersion;</code>

競合のチェック:

更新後、AffectedRows 値がチェックされます:

  • AffectedRows == 1 の場合、更新は競合せずに成功しました。
  • If AffectedRows == 0、競合が発生し、更新に失敗しました。

分離レベル

トランザクション分離レベルは、楽観的ロックで役割を果たします。 READ_COMMITTED 分離レベルでは、他のプロセスはコミットされていない更新を読み取ることができないため、競合の発生が防止されます。

制限

  • スケーラビリティ: オプティミスティック ロックは、高レベルでは効果が低くなる可能性があります。 - 競合が起こりやすい同時実行環境。
  • データ損失: 競合が発生すると、他のユーザーが行ったデータの変更が失われる可能性があります。

どのような場合に行うか

を使用する オプティミスティック ロックは、更新頻度が低く、競合の可能性が低い状況に適しています。これは、ユーザー セッションが短いと同時更新の可能性が低くなる Web アプリケーションでよく使用されます。

以上がMySQL でオプティミスティック ロックを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。