ホームページ >データベース >mysql チュートリアル >MySQL でオプティミスティック ロックを実装するにはどうすればよいですか?

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-26 20:39:30499ブラウズ

 How Can Optimistic Locking Be Implemented in MySQL?

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

MySQL はネイティブにオプティミスティック ロックをサポートしていませんが、標準 SQL 構造とコード ロジックを通じて実装できます。 .

ロックなしアプローチ:

このアプローチでは、明示的なロックは使用されません。ただし、複数のユーザーが同じデータを同時に更新すると、データの一貫性は保証されません。

SELECT data from theTable WHERE iD = @theId;
{code that calculates new values}
UPDATE theTable
SET val1 = @newVal1,
    val2 = @newVal2
WHERE iD = @theId;

オプティミスティック ロック アプローチ:

このアプローチには、コミット前の変更のチェックが含まれます。アップデート。変更が発生した場合、通常は行のバージョン管理または等価性チェックによって判断され、更新は拒否されます。

SELECT iD, val1, val2
FROM theTable
WHERE iD = @theId;
{code that calculates new values}
UPDATE theTable
SET val1 = @newVal1,
    val2 = @newVal2
WHERE iD = @theId
AND val1 = @oldVal1
AND val2 = @oldVal2;
{if AffectedRows == 1 }
    {go on with your other code}
{else}
    {decide what to do since it has gone bad... in your code}
{endif}

バージョニングのオプティミスティック ロック:

オプティミスティック ロックと同様この手法では、バージョン列を使用して変更をチェックします。

SELECT iD, val1, val2, version
FROM theTable
WHERE iD = @theId;
{code that calculates new values}
UPDATE theTable
SET val1 = @newVal1,
    val2 = @newVal2,
    version = version + 1
WHERE iD = @theId
AND version = @oldversion;
{if AffectedRows == 1 }
    {go on with your other code}
{else}
    {decide what to do since it has gone bad... in your code}
{endif}

トランザクションと分離レベル:

トランザクションは、オプティミスティック ロックと組み合わせて使用​​して、確実に変更を確認できます。データの一貫性。ただし、トランザクション分離レベルの選択は、オプティミスティック ロックの有効性に影響する可能性があります。

テストと検証:

オプティミスティック ロックが正しく実装されていることを確認するには、次のことをお勧めします。さまざまなシナリオと分離レベルを使用して徹底的なテストと検証を実行します。

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

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