MySQL で競合状態を停止するにはどうすればよいですか? 当面の問題は、単純なアルゴリズムによって引き起こされます。
- テーブルから行を選択する
- 存在しない場合は、挿入します
次に、重複する行を取得するか、一意/主キーを介してそれを防止すると、エラーが発生します。
通常、ここではトランザクションが役立つと思いますが、行が存在しないため、トランザクションは実際には役に立ちません (または、何か不足していますか?)。
特にテーブルが 1 秒間に複数回更新される場合、LOCK TABLE はやり過ぎのように聞こえます。
私が考えることができる唯一の他の解決策は、すべての異なる ID に対して GET_LOCK() ですが、より良い方法はありませんか? ここでもスケーラビリティの問題はありませんか? また、すべてのテーブルに対してこれを行うのは少し不自然に聞こえます。これは、同時実行性の高いデータベースでは非常に一般的な問題のように思えます。