同時処理(ここでの同時実行とは小規模な同時実行、つまり数人の同時実行)をしたいため、複数の管理者が同時に 1 つのデータを操作することを防ぐために、バックグラウンド管理者が 1 つの返済データを操作します。知らないうちに返済、エラーが発生しました。
私のアプローチは、フィールド lock_time をテーブルに追加し、lock_time が 0 に等しいデータをクエリすることです。クエリを実行した後、lock_time を現在時刻に変更します (更新中に where 条件として lock_time=0 を追加しました)。
質問: これを実行すると、同時実行性は発生しますか?
つまり、理想的な環境下では、2 人が同時に 1 つのデータをクエリできます (1 分または 1 秒以内に「同時に」クエリを実行できます)。
同様に、2 人がデータの特定のフィールドを同時に変更する(1 分または 1 秒以内に「同時に」変更する)ことは可能ですか。
あなたの質問に対する答えは完全に可能です。これらの問題を回避するには、新しいフィールドを使用する代わりに、ロックとトランザクションを使用する必要があります
Baidu innodb ロックで十分です。
楽観的ロックの概念を見てみましょう。バージョン番号フィールドを追加すると、データを読み取るときにそれを無視したり、データを更新するときにバージョン番号を確認したり、バージョン番号を更新したりできます。バージョン番号と lock_time の違いは、lock_time が十分に正確でない場合に重複が発生する可能性があることです。バージョン番号は常に +1 であり、バージョンの重複の問題はありません
。ロックとその他のものは要件を満たすことができるはずです。Mysql のこれら 2 つの概念を詳しく見てみましょう。
あなたのアイデアは楽観的ロックに近いものです。lock_time を検証用のタイムスタンプに変更して、見つかったタイムスタンプを変更したタイムスタンプと比較して送信します。小規模な同時実行には InnoDB の行ロックを使用することもでき、基本的にパフォーマンスの問題はありません。