什么情况下使用存储过程会同时插入两条相同的数据在表中? 20C

自己负责的模块有一个拦截器是往数据库一个表里插入数据,数据是通过代码入参方式进入数据库,拦截器会拦页面上的每一个功能,项目强后滩交互是用springMVC,测试的时候都不会插两条相同的数据,正式上线以后,有少量用户信息会同时插入两条相同的,主键设置自增长,插入的时间数据库显示是一样的,我自己的分析是会不会用户点击一个功能按钮,网络慢拦截器还没执行结束,又点击一次,这样执行两次,拦截器执行两次,调用两次存储过程。有大神可以帮忙分析下嘛

5个回答

多线程并发调用出现的吧,调用的地方加个线程锁lock一下就好了。

有可能是这样的,你的前台没有做重复提交控制吗?

yax405
一个热爱bug的程序猿 回复qq_25018949: 那把方式调整下试试,首先在前端做下控制,不能重复提交试试
接近 2 年之前 回复
qq_25018949
qq_25018949 我这个是一个按钮直接访问controller,拦截器拦controller,数据在拦截器里通过session获得,拦截器里执行方法插入数据
接近 2 年之前 回复

不可能。除非没有主键控制

lintianlin
SinFeeLoo_星凤楼 回复qq_25018949: 你好,你的这个问题找到原因了吗?我也遇到了相同的问题
接近 2 年之前 回复
qq_25018949
qq_25018949 主键有啊,两条相同的数据时两个连续的主键,而且我用数据库SYSTEM的时间记录,两条数据记录时间一模一样
接近 2 年之前 回复

我感觉是并发问题,会不会一个用户名可以同时登陆,或者是前端同时发送两次请求引起

yax405
一个热爱bug的程序猿 从他说的感觉不大可能是这种情况啊,这两条数据的时间戳是一样的说明insert操作的间隔非常短,如果同一个用户名同时登录这个时间间隔应该会比较大才对
接近 2 年之前 回复

用户同时开两个浏览器,在两个浏览器上面同时进行相同的操作,就出现两条相同的数据,两个浏览器同时操作时前台校验无法分辨,只能在后台查询数据库来实时校验

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问