会自动的加锁,你不需要自己做,你只要检测事务执行是否成功,成功执行
commit,失败执行rollback就行了,数据的一致性也就解决了

解决方案 »

  1.   

    还有些疑问,既然是系统自动加锁,为什么有些有些语句比如:
    select from (updlock)
    后面还要nolock,updlock,tablock这些东西干什么用?
      

  2.   

    select后面的锁参数表示select的时候也不允许别人修改数据
    一般的系统不大使用
      

  3.   

    还是有点模糊:
    比如事务A select一个数据项,(共享锁是不是在select完后马上释放?)在它更新这个数据项之前,另一个事务B能不能读取或修改修改这个数据项?
    实在是疑惑,请大家帮帮忙!
      

  4.   

    如果在语句中指定锁的类型,就按照指定的类型加锁。
    >>比如事务A select一个数据项,(共享锁是不是在select完后马上释放?)
    一旦已经读取数据,便立即释放资源上的共享 (S) 锁,除非将事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享 (S) 锁。
    也就是说如果事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享 (S) 锁,那就要在事务提交时释放,否则,在查询完成时释放。
    >>在它更新这个数据项之前,另一个事务B能不能读取或修改修改这个数据
    >>项?
    资源上存在共享 (S) 锁时,任何其它事务都不能修改数据。
    也就是说如果事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享 (S) 锁,那事务B能读取这个数据项但是不能修改删除这个数据项,否则可能会在事务A的SELECT和UPDATE的间隙事务B可以修改这个数据项,但是一般这个间隙是很短的,不好测试。