我有这样的疑问: 当两个用户单击图书按钮时,在同一毫秒内,MySQL 数据库会进行双重输入。如何避免向数据库添加重复数据?
引用文献: 后端:PHP 前端:HTML/CSS/JS
我尝试在执行入口语句之前进行随机中断。
例如:当用户按下:立即预订时,我将暂停下一个流程几秒钟。然后让它继续向MySQL中插入数据。
但这似乎是不好的做法。
我可以知道更好的方法来解决这个问题吗?
编辑:例如,我有一个剧院预订系统。情况是:两个或更多用户同时预订同一个时段并且它被预订。而其中一个应该成功,其余的应该出错。
最佳答案
为了防止用户刚刚输入的数据重复输入(仅防止双击提交按钮插入场景),您可以使用多种解决方案:
- 使用仅触发一次的 JavaScript 按钮;
- 对内容和 user_id 使用
UNIQUE INDEX
。
UNIQUE INDEX 场景如下所示:
CREATE TABLE user_comments (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
comments VARCHAR(4000),
user_id INT NOT NULL,
md5sum_comments CHAR(32)
) ENGINE=InnoDB;
CREATE UNIQUE INDEX idx_unique_comments ON user_comments(md5sum_comments,user_id);
md5sum_comments
是评论列上的 md5sum,因为真实评论对于索引来说可能太大。
现在,当您为某个用户插入相同的注释两次时,其中一次插入将失败,并出现来自 MySQL 的 NON-UNIQUE
索引错误。由于您不想让这个非唯一索引问题打扰您的用户,因此您可以在 php 中捕获该问题并在进一步处理中忽略它。
关于php - MySQL避免重复输入,当同时输入2条相同的记录时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35830435/