大多数数据库需要同时处理多个查询,这些查询并不会像车等待红绿灯排队等待,而是会寻找最短的路径执行,因此需要一个红绿灯进行约束,这个红绿灯就是锁
理论上所有的事务之间应该是完全隔离的,
但是事实上隔离的成本实在太高(必须是序列化的隔离级别才能完全隔离)
sqlserver通过锁告诉所有并发的连接,在同一个时刻,哪些资源可以读取,哪些资源可以修改,当一个事务需要访问的资源加了不可兼容的锁,则sqlserver会阻塞其他事务来达成隔离,直到所请求的资源上的锁被释放
即:当在同一个资源上有了不兼容锁时,后请求资源的事务被阻塞为等待状态
可以使用:
SELECT * FROM sys.dm_tran_locks AS dtl
来查看当前数据库中已存在的锁
注意:使用这种方式看到的是 在查询时间点的数据库锁的情况,并不包含任何历史记录,以Resource开头的是描述资源信息
以request开头的是锁本身的请求信息