200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > MySQL 共享排他锁_mysql 共享排他锁

MySQL 共享排他锁_mysql 共享排他锁

时间:2024-07-23 03:25:56

相关推荐

MySQL 共享排他锁_mysql 共享排他锁

1、基础知识

共享锁又叫S锁(Share Locks),共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

排他锁又叫X锁(eXclusive Locks,记为X锁),排他锁就是不能与其他锁并存,只有等待锁释放完成以后其他事务才能得到锁。

下面是共享锁与排他锁的互斥关系

SX

S 兼容 互斥

X 互斥 互斥

2、练习题

有autoid表数据如下

a、共享锁(select ...... lock in share mode;)

SessionA

SessionB

begin;

select * from test.autoid WHERE id=1 lock in share mode;

begin;

UPDATE test.autoid SET `name`="xxxx" WHERE id=1;

锁超时

(图A)

SessionA

SessionB

begin;

begin;

select * from test.autoid WHERE id=1 lock in share mode;

select * from test.autoid WHERE id=1 lock in share mode;

有数据

有数据

(图B)

可以从上图(A)中看到,因为事务A对数据1加上了共享锁,并且当时事务A的锁并没有进行释放,所以事务B对数据进行更新操作的时候是不可以进行操作的。在图B当中我们可以看到,当事务A对数据进行了加锁,这个时候事务B是可以读取数据的,不需要进行阻塞。但是如果这个时候事务A对数据进行了更改,并且事务没有提交的情况下,那么这个时候事务B读取的数据会是旧数据而不是新数据。由此可以看出,共享锁是:读读可以并行;

b、排他锁(select ...... for update;)

sessionA

sessionB

begin;

select * from test.autoid WHERE id=1 for update;

begin;

select * from test.autoid WHERE id=1 for update;

阻塞,等待A事务执行

从上图可以看到,对数据加上了排他锁以后,即使事务B是对事务A进行读取操作也是无法进行了,这也正应正了刚才所说的,排他锁与其他锁是互斥的,排他锁:写写/读写必须互斥;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。