数据库中表T1结构如下:
A字段 主键 字符串类型
B字段 FLOAT类型T1中有若干条记录现根据A值等于1001 取出一条记录 B值为0现在有100个用户并发对这一条记录操作,根据主键A=1001 ,修改B的值,100个用户同时对B值进行减1的操作现在想实现100用户都操作成功,并且B的值最终修改的正确的,最终B的值应该是-100弱弱的问下,可以实现嘛,大家帮帮忙,分不够另开贴加,谢谢SQL代码如何写
A字段 主键 字符串类型
B字段 FLOAT类型T1中有若干条记录现根据A值等于1001 取出一条记录 B值为0现在有100个用户并发对这一条记录操作,根据主键A=1001 ,修改B的值,100个用户同时对B值进行减1的操作现在想实现100用户都操作成功,并且B的值最终修改的正确的,最终B的值应该是-100弱弱的问下,可以实现嘛,大家帮帮忙,分不够另开贴加,谢谢SQL代码如何写
解决方案 »
- mssql如何截取最后一个逗号","的一个字符串。
- 求sql
- 一个面试时的题
- 如何提高这种UPDATE的速度啊?
- [高分求解-顶者有分]求百分比的问题?
- .ldf 文件变得相当庞大(2G)怎么给它瘦身?
- 请教,能在不安装MS-SQL的情况下,得到查询分析器和企业管理器吗?机器太差,而网络上已经有MS-SQL服务器了...
- SQL Server和CRecordset的问题
- InterDev,Dreamwerver,Delphi,SQL Server,Photoshop这些软件正版各值多少钱?
- 请问一个Sql语句的问题。
- 如何将不同列中的数据整合到同一列中
- 怎样将数据变成这种形式输出到EXCEL中?
update t1 set B=100 where A='1001'系统会自动分先来后到的.
UPDATE T1 SET B=B-1 WHREE A='1001'
COMMIT TRAN
UPDATE T1 SET B=B-1 WHREE A='1001'
COMMIT TRAN这里 BEGIN TRAN COMMIT TRAN 加不加都一样,因为你只有一句,并且 update 本身就是一个事物
--#1.如果记录已经存在.则不用担心并发的问题.因为:行上的更新锁,是排它的,系统会在更新此行时锁定这一行记录,其它线程的update操作必须等待更新锁释放后,才能对此行记录进行操作.
--#2.把SQL放在一个事务中,只是为了加长更新锁保持的时间.
--#3.注意SQL SERVER提示的错误是:已超过了锁请求的超时时段。说明,多线程并发update没有问题,只是操作此行的线程太多,有些线程等不耐烦了(超时),才报些错.而不是由于并发引起的.