一个关于数据库级别的并发问题

需求:流水表的订单号对于交易A是允许重复的,但是对于交易B是不允许重复的。程序需要部署负载均衡。
设计
交易A可以直接插入数据库
交易B需要先根据订单号去数据库查询下有没有这条数据,没有才执行插入
问题
如果B交易有并发请求的时候(订单号相同)查的时候是没有数据但是查询完之后另一个并发请求插入了数据,然后这个查询的也插入了数据,那就会造成B交易在数据库有重复订单号的情况。
图片说明

3个回答

这边没人,具体大家看下面这个吧,这个讨论出了一些解决方案。
http://bbs.csdn.net/topics/392079561

求解怎么解决这种问题

对应数据库字段设置唯一索引,对应数据插入用事务,冲突可以进行回滚。

qq32933432
诺浅 不能用唯一索引,因为对于其他交易来说(交易A)是运行订单号重复的。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问