mysql共享锁与排他锁

共享锁与排他锁都是对行级锁而言的。

定义:

      共享锁(S锁):又被称为读锁,某条数据被事务a加上了共享锁,其他事务也可以访问到该条数据(仅能访问不能修改)

      排他锁(X锁):又被称为写锁,事务a获取了某行数据的排他锁,其他事务就不能获取该行的排他锁了,而事务a是可以对该条数据进行读取,修改操作。

拓展:mysql的Innodb引擎,update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型。select ...for update 就给给select语句加上排他锁。如果事务a通过该种方式给某条数据加上了排他锁,那么事务b可以这样进行读取该条数据select...(去掉for update)。

验证:

1、表a数据如下

mysql共享锁与排他锁_第1张图片

 

 

2、开启事务a,查询数据id=1的数据(给该条数据增加排他锁),不提交,然后开启事务b,同时也查询id=1的数据,执行结果如下:

mysql共享锁与排他锁_第2张图片

 

 

 

 

 

 

 

 

 

 

mysql共享锁与排他锁_第3张图片

 

 

 

 

 

 

 

 

 

 

 

由于右侧进程执行被阻塞,一直等待,最终报了锁超时的错误。

3、将左侧的内容取消增加的排他锁会出现什么情况呢?实验结果如下:

mysql共享锁与排他锁_第4张图片

mysql共享锁与排他锁_第5张图片

发现结果也查询出来了

最后补充下:slect语句添加共享锁:select ...  LOCK IN SHARE MODE

你可能感兴趣的:(mysql)