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

关于并发 自增ID 增加的问题
我有一个表。
可能存在多个用户同时增加的情况
字段为
[ID] 自增的 
[USERID] 这个是取[ID]+1 (使用SELECT 查了然后读ID+1)
如果多个人同时操作,那么就会纯在这种问题了。
A用户取了ID+1 =2 但是还没有增加,这样B用户取得数据肯定也是ID+1=2,这样就有一个会增加失败。
怎么避免呢?
谢谢各位解答。

------解决方案--------------------
SQL code

--方法一:
---把userid设置唯一约束,然后获取到添加重复错误时候的@@error的值
---如果这个值为:2627,重复约束问题,那么你userid再加1

------解决方案--------------------
"使用SELECT 查了然后读ID+1"
------------------------
这么做哪行啊.需要自己建立一个Sequence表,表中存着各个ID值.每一次取值都是select ID from Sequence where Name='xxx',然后 update Sequence set XXID=XXID+1 where Name='xxx'
这个过程放到存储过程中执行,这样可以保证取值的唯一性.
否则就是土法炼钢,很容易造成不同的并发请求取相同的值,造成ID不唯一了.