2)共享锁
在第一个连接中执行以下语句
begin tran
select * from table1 with(holdlock) --holdlock人为加锁
where B='b2'
waitfor delay '00:00:30' --等待30秒
commit tran
在第二个连接中执行以下语句
begin tran
select A,C from table1
where B='b2'
update table1
set A='aa'
where B='b2'
commit tran
若同时执行上述两个语句,则第二个连接中的select查询可以执行
而update必须等待第一个事务释放共享锁转为排它锁后才能执行 即要等待30秒
----------------------------------------------------------------------------------------------问题1: 当第一个连接事务结束后,共享锁应该也被释放掉了,是吗?问题2:而update必须等待第一个事务释放共享锁转为排它锁后才能执行 即要等待30秒 ?这个"释放共享锁转为排它锁后才能执行"不是很明白..第一个事务中也没有更新语句。怎么会有排它锁。。菜鸟问题。知道的朋友说下。谢谢~~~
在第一个连接中执行以下语句
begin tran
select * from table1 with(holdlock) --holdlock人为加锁
where B='b2'
waitfor delay '00:00:30' --等待30秒
commit tran
在第二个连接中执行以下语句
begin tran
select A,C from table1
where B='b2'
update table1
set A='aa'
where B='b2'
commit tran
若同时执行上述两个语句,则第二个连接中的select查询可以执行
而update必须等待第一个事务释放共享锁转为排它锁后才能执行 即要等待30秒
----------------------------------------------------------------------------------------------问题1: 当第一个连接事务结束后,共享锁应该也被释放掉了,是吗?问题2:而update必须等待第一个事务释放共享锁转为排它锁后才能执行 即要等待30秒 ?这个"释放共享锁转为排它锁后才能执行"不是很明白..第一个事务中也没有更新语句。怎么会有排它锁。。菜鸟问题。知道的朋友说下。谢谢~~~
2、释放共享锁转为排它锁后才能执行
--》》共享锁是第一个事务加的,排它锁是第二个事务要加的。但是两个是不能并存的,所以必须要等到第一个锁释放后,才能加排它锁