首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

关于使用sql server数据库解决局域网内共享加锁的有关问题

2012-03-11 
关于使用sql server数据库解决局域网内共享加锁的问题?以前做了一套F/S的以dbf表的局域网的程序,现在,由于

关于使用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
确实这样的语句直接用不会有问题的

热点排行