假设不声明任何事务,如果一个简单的insert语句往某表中插入一条数据耗时1秒,那么在这一秒钟内,如果有另一个进程的sql语句试图删除这条数据,会发生什么情况?
该delete操作会被阻塞,直到插入完成以后再执行?如果同时又有许多select语句和update语句,他们都将被阻塞?会不会造成报错的情况?

解决方案 »

  1.   

    SET XACT_ABORT { ON | OFF }--是否自动回滚当前事务
    go 
    楼主提出的问题:步骤会等待
    go
    sp_lock--查看当前锁的状态
      

  2.   

    插入完成之前,delete和update都会被阻塞。任何单个的操作SQL语句本身就是一个隐性事务
      

  3.   

    insert、update、delete操作会加排它锁,当你执行insert操作时,其他操作会等待该进程结束。
    select操作会加共享锁,你可以对同一数据进行多个select,查询结束后,共享锁会被释放。
    当select进程未结束,insert、update、delete会等待该进程结束。