ホームページ >データベース >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 サイトの他の関連記事を参照してください。