mssql sqlserver 意向锁的简介及用途


摘要:
mssql sqlserver意向锁主要用于保护数据库底层的数据资源,防止不同的事务之间同时对数据进行操作,导致数据异常,
意向锁也是数据库底层对数据操作的一种优化手段


数据库锁的粒度简介
1 表锁

此锁会对整个表进行加锁,通常出现在 alter table delete table等操作中。

2 行锁

当我们操作一行记录时,此时会出现行级锁,通常出现在 update insert delete等操作中。

————————————————————-
意向锁用途:

避免锁冲突,是数据库引擎处理各种锁的方式

例:事务1 锁定表中一行数据,
事务2 申请对整个表进行更新操作
此时事务2 如果可以申请成功,如果对数据表进行全表操作,都会和事务1发生冲突
数据库为了避免此类冲突,必须使事务2 处于阻塞状态,待事务1 释放相应的锁后,然后进行相关操作

事务2 如何判断自己当前应该处于阻塞状态呢?
如果没有意向锁,事务2需要遍历所有行,只要检查到有一行被锁定,这种操作模式会导致db效率低下,
此时数据库引擎引入了”意向锁”的概念,如下所示:
——————————————
事务1:需要申请行锁时,先申请表的意向共享锁,然后再申请行锁
事务2:发现表上存在意向共享锁,说明表上存在行锁,立即就将自己处于阻塞状态