数据库中表T1结构如下:
A字段 主键 字符串类型
B字段 FLOAT类型T1中有若干条记录现根据A值等于1001 取出一条记录 B值为0现在有100个用户并发对这一条记录操作,根据主键A=1001 ,修改B的值,100个用户同时对B值进行减1的操作现在想实现100用户都操作成功,并且B的值最终修改的正确的,最终B的值应该是-100弱弱的问下,可以实现嘛,大家帮帮忙,分不够另开贴加,谢谢SQL代码如何写

解决方案 »

  1.   

    可以,直接update就行了。都不用考虑并发。
      

  2.   

    当然,不用事务也一样.一条语句就相当于一个隐式事务.每个人都这样去执行:
    update t1 set B=100 where A='1001'系统会自动分先来后到的.
      

  3.   

    我写了个代码测试情况,一个程序开了20个线程,没个线程循环下面的代码100次执行,会报错的,提示锁出错BEGIN TRAN
    UPDATE T1 SET B=B-1 WHREE A='1001'
    COMMIT TRAN
      

  4.   

    BEGIN TRAN
    UPDATE T1 SET B=B-1 WHREE A='1001'
    COMMIT TRAN这里 BEGIN TRAN COMMIT TRAN 加不加都一样,因为你只有一句,并且 update 本身就是一个事物
      

  5.   

    --参考:
    --#1.如果记录已经存在.则不用担心并发的问题.因为:行上的更新锁,是排它的,系统会在更新此行时锁定这一行记录,其它线程的update操作必须等待更新锁释放后,才能对此行记录进行操作.
    --#2.把SQL放在一个事务中,只是为了加长更新锁保持的时间.
    --#3.注意SQL SERVER提示的错误是:已超过了锁请求的超时时段。说明,多线程并发update没有问题,只是操作此行的线程太多,有些线程等不耐烦了(超时),才报些错.而不是由于并发引起的.