我不想使用表锁定,而我也不知道一页是多少,我只想锁定确定的几条记录怎么办?第二个我说的意思是这些sql应该被看作一条语句来执行,这和事务等效吗?例如我正在执行一个,然后另一个进程更新了数据库,这样这个就会得出错误的结果(这个时候err=0)。

解决方案 »

  1.   

    1. 采用临时表行不行?sqlserver的行级锁定是什么意思?是一次只锁定一行?
    2. 不,有可能产生逻辑错误,例如第一个进程取出order,然后update ordernext=order+1,这时候另一个进程把这个order改了。。
      

  2.   

    这个问题还在于对数据库锁和事务的理解。
    当你的一个进程在更新数据库的某条记录,那么就会自动获得一个排他锁,其它进程此时只能等待,等第一个进程释放锁后才能去修改数据,不会出现你说的更新数据时还有其它的进程同时更新。
    你的第二个问题是希望能连续执行几条sql语句,我的理解是你可能要求排他地连续执行,zhudexiang(阿祥)说的没错,要使用事务,而且还要设置事务隔离级别:
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 
    这样,当第一个进程取出order,修改的过程中,其它进程取都取不到,更谈不上修改了。
    这种最普通的并发操作,数据库肯定会处理好的,不用你过多操心。