什么情况下 会锁定整张表

测试环境 window server 2008 数据库 MSSQL server 2008R2

1 创建表
create table tmpTest
(a int identity,
b varchar(10),
c varchar(10),
d varchar(10),
e varchar(10),
f varchar(10)
)

2 插入数据的锁表情况

开始事务

begin tran
—插入数据
insert into tmpTest
(b,c,d,e)values(‘b’,’c’,’d’,’e’)

—展示锁表情况

会锁定整张表 及 这个表所在的行数据 ,
会产生 IX 排它意图锁 X 排它锁
——————————————————————
此时不可以查询数据(可以进行脏读数据),不可以进行数据更新,但是可以插入数据,

截图
MSSQL插入数据锁表情况分析

3 更新数据时的锁表情况
begin tran
update tmpTest set c =’sdf’ where a=1


会锁定整张表 及 这个表所在的行数据 ,
会产生 IX 排它意图锁 X 排它锁
可以进行插入,不可以进行更新操作 ,不可以进行查询操作(脏读除外)

4 加入主键后的 插入和更新情况
如果我们采用的是主键更新,锁定表的话,此时我们只会产生主键的排它锁,表的排它意图锁
插入数据的话,此时我们只会产生主键的排它锁,表的排它意图锁
4.1 插入数据
不可以进行更新,只可以进行数据插入

4.2 更新数据
此时我们是可以进行 主键上其它数值的更新操作及插入操作


插入和更新 删除 都会锁定整张表,
如果对主键所关联的数据进行操作时,此时也是锁定整张表,只是非主键关联的数据,可以进行更新操作
整张表被锁定,可以进行数据插入操作