我有一个涉及将一行插入表中的 ajax 发布请求的系统。似乎有时ajax调用被调用两次,这意味着相同的数据在相邻的两个行中插入了两次。
我打算先添加一个查询以尝试选择具有相同数据的行,然后如果行数 = 0 添加它。有没有更好的方法可以避免进行两次查询?
您可以在插入语句中使用 INSERT IGNORE INTO 语法或 INSERT...ON DUPLICATE KEY UPDATE。
如果您使用 INSERT IGNORE,那么如果它导致重复键,则实际上不会插入该行。但该语句不会产生错误。它会生成一个警告。
INSERT IGNORE INTO mytable
(primaryKey, field1, field2)
VALUES
('abc', 1, 2);
我想说解决这个问题的最好方法是在你的应用程序中使用一个临时令牌(它可以兼作 CSRF 令牌,无论如何你可能需要它......)。
如果令牌与操作一起发送,则使令牌过期,使其不能重复。