web并发,多线程访问对数据库进行插入操作,主键冲突。
页面上传多个文件(比如6个),文件上传好后页面会获得这个6个文件的id。
上传到文件服务器后。。文件服务器会对文件进行处理,会发送请求到业务服务器,参数为文件的唯一id。业务服务器的A类中的insert1()会插入B表,插入前会先查询是否有该id的数据,如果有就会更新某个值。
6个文件全部上传好后页面跳转时会把这个6个id 发送到业务服务器,业务服务器的A类中的insert2()会将id插入B表,插入前会先查询是否有该id的数据,如果有就会更新某个值。
那么问题来了,我在2步骤的查询B表没有该id值,然后执行插入B表;但在3步骤时也查询B表没有该id值,于是也插入B表。这个时候就报了主键冲突。
如果给这个两个方法都加了锁,虽然可以解决,但感觉会变的很慢,有没有更好的解决办法@Arthur老师?