日期:2014-05-18  浏览次数:20712 次

插入数据库出现重复数据的问题?
如题,一个预约单里面可以有多个预约项,预约项是包括预约时间的,每次提交后都会去和数据库里的预约项做对比看是否冲突,如果不冲突才允许插入数据库。但现在有一个预约单的预约项在数据库中出现了重复插入的情况。重复数据为预约项的第一项和第二项重复,第三项和第四项重复这种规律。但之前之后的预约单的预约项都是正常的,请问这种情况可能是怎么造成的?例外,如果是对预约单做修改时,预约项都是先删除再重新插入的方式去更新预约项的。
数据库 重复数据

------解决方案--------------------
你这个预约项需要做唯一约束的。不然在客户端,如果连续点击两次,就会提交两次的,造成数据重复的,
而你这个预约项不知道是不是字典数据,最好做成字典数据
------解决方案--------------------
这个很明显是页面的下单页面没做防重复提交,下单页面的表单信息被连续提交了2次。

从数据上来说这是正常的2次请求,只不过请求内容一模一样,对数据库层面而言这都是正确数据,因此数据库解决不了业务上的重复提交的。

可以让下单页面提交后加遮罩层防止继续提交,或者使用页面标记值防止同一个页面重复提交。


------解决方案--------------------
引用:
Quote: 引用:

你这个预约项需要做唯一约束的。不然在客户端,如果连续点击两次,就会提交两次的,造成数据重复的,
而你这个预约项不知道是不是字典数据,最好做成字典数据

预约项的id做为主键,用的触发器自动生成id的方式。出现重复数据的地方,id是不重复的,按顺序生成的,但除了id之外的其他字段就出现重复了


那你在触发器上再加上,select 除了id之外的字段 存在时则不予插入 不就行了。
------解决方案--------------------
引用:
你这个预约项需要做唯一约束的。不然在客户端,如果连续点击两次,就会提交两次的,造成数据重复的,
而你这个预约项不知道是不是字典数据,最好做成字典数据

两个事务并发,他们获取的状态都是当前要插入的记录不存在,然后先后去插入,第一条能插进去,而第二个事务就会失败,怎么解决这个问题?