テーブルに行を挿入するajaxpostリクエストを含むシステムがあります。ajax呼び出しが2回呼び出されることがあるようです。つまり、同じデータが2つの隣接する行に2回挿入されます。
最初にクエリを追加して同じデータの行を選択し、行数=0の場合はそれを追加することを計画しています。2つのクエリを実行する必要を回避するより良い方法はありますか?
挿入ステートメントでINSERTIGNOREINTO構文またはINSERT...ON DUPLICATEKEYUPDATEを使用できます。
INSERT IGNOREを使用すると、キーが重複する場合、行は実際には挿入されません。ただし、ステートメントはエラーを生成しません。代わりに警告が生成されます。
INSERT IGNORE INTO mytable
(primaryKey, field1, field2)
VALUES
('abc', 1, 2);
これに対処する最善の方法は、アプリケーションで一時トークンを使用することです(これは、CSRFトークンとしても使用できますが、とにかく必要になる可能性があります)。
トークンが操作と一緒に送信される場合は、トークンを期限切れにして、繰り返されないようにします。