专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VFP

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

发布时间:2010-05-24 22:03:47 文章来源:www.iduyao.cn 采编人员:星星草
关于使用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
确实这样的语句直接用不会有问题的
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: