百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql的同享锁与排他锁详解
分享文章到:

mysql的同享锁与排他锁详解

发布时间:09/01 来源:未知 浏览: 关键词:
mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的同享锁与排他锁停止分享交流。

同享锁又称为读锁,简称S锁,望文生义,同享锁就是多个事务关于统一数据可以同享一把锁,都能拜访到数据,但是只能读不克不及修改。

排他锁又称为写锁,简称X锁,望文生义,排他锁就是不克不及与其他所共存,如一个事务猎取了一个数据行的排他锁,其他事务就不克不及再猎取该行的其他锁,包罗同享锁和排他锁,但是猎取排他锁的事务是可以对数据就行读取和修改。

关于同享锁大家大概很好懂得,就是多个事务只能读数据不克不及改数据,关于排他锁大家的懂得大概就有些差异,我起初就犯了一个错误,认为排他锁锁住一行数据后,其他事务就不克不及读取和修改该行数据,其实不是这样的。排他锁指的是一个事务在一行数据加上排他锁后,其他事务不克不及再在其上加其他的锁。mysql InnoDB引擎默许的修改数据语句,update,delete,insert都会主动给触及到的数据加上排他锁,select语句默许不会加任何锁类型,假如加排他锁可以使用select ...for update语句,加同享锁可以使用select ... lock in share mode语句。所以加过排他锁的数据行在其他事务种是不克不及修改数据的,也不克不及通过for update和lock in share mode锁的方式查询数据,但可以直接通过select ...from...查询数据,由于一般查询没有任何锁机制。

说了这么多,咱们来看下以下简便的例子:

我们有如下测试数据

微信截图_20200502103234.png

此刻我们对id=1的数据行排他查询,这里会使用begin开启事务,而不会看见我关闭事务,这样做是用来测试,由于提交事务或回滚事务就会开释锁。

翻开一个查询窗口

微信截图_20200502103320.png

会查询到一条数据,此刻翻开另一个查询窗口,对统一数据离别使用排他查和同享锁查询两种方式查询

排他查

微信截图_20200502103329.png

同享查

微信截图_20200502103341.png

我们看到开了排他锁查询和同享锁查询都会处于堵塞状态,由于id=1的数据已经被加上了排他锁,此处堵塞是等候排他锁开释。

假如我们直接使用以下查询呢

微信截图_20200502103519.png

我们看到是可以查询到数据的。

我们再看一下一个事务猎取了同享锁,在其他查询中也只能加同享锁或不加锁。

微信截图_20200502103550.png

微信截图_20200502103633.png

微信截图_20200502103644.png

我们看到是可以查询数据的,但加排他锁就查不到,由于排他锁与同享锁不克不及存在统一数据上。

最后我们验证下上面说的mysql InnoDb引擎中update,delete,insert语句主动加排他锁的问题,

微信截图_20200502103820.png

此时同享查询处于堵塞,等候排它锁的开释,但是用一般查询能查到数据,由于没用上锁机制不与排他锁互斥,但查到的数据是修改数据此前的老数据。

微信截图_20200502103854.png

然后我们提交数据,开释排他锁看下修改后的数据,此时可用排他查,同享查和一般查询, 由于事务提交后该行数据开释排他锁,下面就只显示一般查询,其他的同学们本人去验证。

微信截图_20200502103928.png

可以看到结果与预测的一样。

引荐教程:《Mysql教程》

以上就是mysql的同享锁与排他锁详解的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板