并发和锁
onlie 2007-05-21 05:40:30 我首先来讲一下我的大概情况
有一个订单,他的流水号是根据自定义的规则生成的
有一个表专门记录流水号的号段,表结构如下:
OrderSpan(订单区间)
OrderSpanId int /* 主键 identity */
BeginOrderId varchar(10) /* 开始号 */
EndOrderId varchar(10) /* 结束号 */
CurrentOrderId varchar(10) /* 当前的号 */
如数据: 1 2007000001 2007999999 2007000010
.....................................
还有一个表专门回收没有用到的号
UnUsedOrder(回收的订单)
UnUsedOrderId int /* 主键 identity */
OrderSpanId int /* 外键 */
OrderId varchar(10) /* 没有使用的订单 */
如数据: 1 1 2007000001
2 1 2007000002
................
最后一张是订单表,记录用户订单
Order(订单)
OrderId varchar(10) /* 主键 */
.......
其中 OrderId 是这样得来的:
首先查 UnUsedOrder(回收的订单表),如果该表有数据,那么则取其中最的最小的一个,再将该号从该表中删除.
如果UnUsedOrder(回收的订单表)中没有记录,那么就从OrderSpan(订单区间)读取CurrentOrderId,然后把CurrentOrderId=CurrentOrderId+1
用上面方法来生成OrderId,并插入到Order表中
在多用户情况下会产生重复的OrderId,请问怎么解决,谢谢!!!