关于使用sql server数据库解决局域网内共享加锁的问题?
以前做了一套F/S的以dbf表的局域网的程序,现在,由于数据量增大,准备升级为sql server数据库,客户端差不多有20多个,程序经常会涉及到很多用户同时去防问同一个表,同一个字段。
如:表【Name】中的【number】字段。
会有很多用户在同一时间,在number字段上+1,以前的方法是:
use name shar
do whil .t. && 循环判断能否加锁
if flock()
repl number with number+1
unlock && 解锁
exit
endi
endd
* ------------------------------------------------------ \\
请问有做过的高手,我要是用sql server中的update。
1、update是不是默认就加锁了,就能实现我的要求。
2、是给记录加锁还是给表加锁,如果update不能加锁,怎么加锁?。
望做过的高手给于指点,谢谢!
[解决办法]
在 MSSQL 中有个"事务"的概念,对表操作的语句放在事务中执行,执行过程中,其他用户访问不到同一表的同一条记录,要等前一事务结束后,才允许访问,因此,你的更新语句只要这样做就行了:
update tb set number=number+1 where id=123
这是一条标准的SQL语句,直接这样执行就好了.
如果你要更新多条语句,则:
update tb set number=number+1 where id bewteen 123 and 234
可能楼主要问,"事务"呢?
MSSQL里有规定的,即使你不加事务(显式事务),MSSQL会自动为每一条语句加一个隐式事务,不需要你去考虑锁的问题.
如果一定要加,则:
begin transaction
update....
commit
[解决办法]
SQL SERVER会自动加锁,以防止两个同用户时UPDATE一条记录。
[解决办法]
update tb set number=number+1 where id=123
确实这样的语句直接用不会有问题的