数据库锁机制2-------排它锁

版权声明: https://blog.csdn.net/qq_39769369/article/details/82800611

排它锁:

什么是排它锁:其他事务对该资源既不能读也不能改,排它锁独占资源

example 1: (假设id是连续增长的)

req1:update tabletast set .... where id >10

req2:update tabletast set .... where id <10

若req1先到达,给表id大于10的数据加上排他锁,这时req2到达要给id小于10 的数据加上排它锁,虽然req1并没有释放资源,但是两者锁的资源不冲突,所以req2不会被阻塞。

example 2: (假设id是连续增长的)

req1:update tabletast set .... where id >20

req2:update tabletast set .... where id <10

若req1先到达,给表id大于20的数据加上排他锁,这时req2到达要给id小于10 的数据加上排它锁,这时req2会被阻塞,只能等req1释放排它锁,req2才能加上排它锁。说明同一资源只能有一个排它锁。

example 3: (假设id是连续增长的)

req1:

开启事务

select *  from tabletest 

update tabletest set .... 

req2:

开启事务

select *  from tabletest 

update tabletest set .... 

若req1和req2同时到达 第一句,都给该表加上共享锁,该表已存在两个共享锁,这时不会出现阻塞状况。当req1和req2都开始执行第二句时,都想升级为排他锁,这时事务没结束,req1和req2的共享锁还没释放,req1想升级为排它锁,等待req2共享锁的释放,req2也想升级为排它锁,等待req1共享锁的释放,形成了死锁!

猜你喜欢

转载自blog.csdn.net/qq_39769369/article/details/82800611
今日推荐