数据库重复写入数据问题处理

时间:2021-09-13 20:29:16
1,做唯一约束的。不然在客户端,如果连续点击两次,就会提交两次的,造成数据重复的,

而你这个预约项不知道是不是字典数据,最好做成字典数据

很明显是因为页面的下单页面没做防重复提交,下单页面的表单信息被连续提交了2次。
从数据上来说这是正常的2次请求,只不过请求内容一模一样,对数据库层面而言这都是正确数据,因此数据库解决不了业务上的重复提交的。
可以让下单页面提交后加遮罩层防止继续提交,或者使用页面标记值防止同一个页面重复提交。

2,使用ignore关键字

如果是使用主键 primary 或者唯一索引 unique区分了记录的唯一性,避免重复插入记录可以使用

INSERT INGORE INTO ·table_name· ('user_id', 'email', 'phone') VALUES('1', '979030158@qq.com', '18310316265')

当有重复记录就会忽略。执行后返回0。

3,replace into 

跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

MySQL replace into 有三种形式:

1. replace into tbl_name(col_name, ...) values(...) 2. replace into tbl_name(col_name, ...) select ... 3. replace into tbl_name set col_name=value, ...