SQL 锁问题
现在有一个问题请教各位大神。
我有一个需求。数据库中有一个职工表,其中有个int型的ID字段。在程序中添加员工时,要点击‘检测ID’按钮获取数据中最大的ID并加一形成最新的ID。
列子:假设数据库中职工表的最大ID为135,那么我点击‘检测ID’按钮之后得到的新ID就是136。
但是问题就出现了,假设多个人同时点击'检测ID'按钮,获得的最新ID都是一样的。
列子:假设数据库中职工表的最大ID为135,那么多人同时点击‘检测ID’按钮之后得到的新ID都是136。
我想要的效果是在甲点击‘检测ID’获取到新ID之后,后面的用户就无法获取到最新ID。要等甲完成新增操作之后,后面的用户才能获取到最新的ID。
请问能否用SQL中的锁之类的方法解决这个问题,或者说其他什么方法。
[解决办法]
参考一下我的文章:http://blog.csdn.net/dba_huangzj/article/details/7685162
[解决办法]
之前也看到论坛中,有你说的方法,就是先求max,然后加1,这种方法,在大量并发操作的时候,
就会出现你说的那种获取的id都是一样的。
可以考虑这样,新建一个表:
create table tb_id(tb_name varchar(100),currval int,status int)
insert into tb_id
values('xxx',表中当前的最大值,0)
begin tran
declare @currval int
update tb_id
set status = 1,
@currval = currval,
currval = currval + 1
where status = 0 and tb_name = 'xxx'
--使用id
insert into xxx
values(@currval)
update tb_id
set status = 0,
where status = 1 and tb_name = 'xxx'
commit tran