php - MySQL避免重复输入,当同时输入2条相同的记录时

标签 php mysql web e-commerce

我有这样的疑问: 当两个用户单击图书按钮时,在同一毫秒内,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/

相关文章:

javascript - 从 Woocommerce get_customer_location Ajax 事件中删除

php - 使用php将数据从表单插入mysql数据库中的多个表

php - MYSQL IF(expr1,expr2,expr3) 但我不想要任何 expr3(如果 expr3 则不输出任何内容

php - 单独获取MySQL列值

计数为 0 的 SQL

html - 如果主体具有类,则元素的 CSS 选择器

html - 从 wwwroot 加载时缺少 css 部分

PHP/MySQL 事件(ala facebook)

MySQL varchar 字段之间的减法返回精度过高的小数

C# Web 异常意外的 EOF