如果你没有另外加上一个事务,SQL会把你要执行的语句放在一个隐式的事务中
也说是说,只有当语句执行后完,隐式事务结束,锁才放掉

解决方案 »

  1.   

    不太明白,我是想问我执行那个select语句之后
    我后面的更新,删除操作的时候,表table1是否还是受那个tablockx锁的保护,
    其他的进程都不允许访问表table1
      

  2.   

    1.所加的锁tablockx是只对上面那个select有效还是整个事务commit前都有效??
    2.资料说tablockx是“在语句或事务结束前一直持有”,那到底怎么判断和设置是语句,还是事务结束前持有呢?
    我的解答:1:你上面的语句,tablockx 会在你执行这条语句以后,在表 table1  保持到事务结束
    2:如你范例,如果你在一个显式事务中,那么保持到事务结束(你的语句是显式事务),否则是在你语句结束以后,表锁即释放。如果你在语句中不加显式的表锁,则在你读取完一页后,锁即释放,而不是保持到你的整条语句结束。============================
    http://chinadba.cn
    深圳骄子数据库技术网,最具实战经验的数据库优化高手为您服务
      

  3.   

    学习 SQL Server 啊 努力 奋斗-----------------------------------------------------
      

  4.   

    ROWLOCK指定在通常采取单个共享页或表锁的情形下采取共享行锁。SERIALIZABLE等同于 HOLDLOCK。通过将共享锁保持到事务完成,使之更具有约束性(而不要不管事务是否完成,都在不再需要所需的表或数据页时就立即释放共享锁)。用与运行在 SERIALIZABLE 隔离级别的事务相同的语义执行扫描。有关隔离级别的更多信息,请参见 SET TRANSACTION ISOLATION LEVEL。TABLOCK指定在表上采取的共享锁一直保持到语句结束。如果同时指定 HOLDLOCK,那么在事务结束之前该共享表锁将一直保持。TABLOCKX指定在表上采取的排它锁一直保持到语句结束或事务结束。UPDLOCK指定读取表时采取更新锁而不是共享锁,且将这些更新锁保持到语句结束或事务结束。XLOCK指定应采取排它锁,且保持到由语句所处理的全部数据上的事务结束。如果与 PAGLOCK 或 TABLOCK 一同指定,则排它锁适用于适当的粒度级别。 SQL Server 啊 努力 奋斗-----------------------------------------------------