设为首页 收藏本站
查看: 805|回复: 0

[经验分享] mysql select是否会锁表 ?

[复制链接]

尚未签到

发表于 2018-9-29 13:59:42 | 显示全部楼层 |阅读模式
  mysql select是否会锁表 ?
  有的人说mysql的 select 会锁表 ,有的人说 mysql 的查询不会锁表 。
  其他他们都对,没有 ,但是很片面。
  其实对于mysql的select 是否会锁表 ,这个完全取决于表采用的是什么存储引擎。
  这里我就拿大家最熟悉的存储引擎INNODB 和MYISAM 来说明这个问题。
  对于myisam的表select 是会锁定表的 ,会导致其他操作挂起,处于等待状态。
  对于innodb的表select 是不会锁表的。其实这里使用到了快照。快照这里不作讨论。
  下面是是我的佐证:
  回话一:
  select SQL_NO_CACHE * from tmp002
  表 tmp002  有5618288 数据 存储引擎时INNODB  ,全部查询出来大约需要5min左右
  回话二:
  update tmp002
  set num=6
  where MreasonId in ('700098','301001' ) limit 10000
  我们首先 执行以下 回话一的 语句 。 再执行回话二。
  我们会发现回话2很快就执行了
  update tmp002
  set num=6
  where MreasonId in ('700098','301001' ) limit 10000
  受影响的行: 0
  时间: 0.120s
  在回话三种执行下 show full PROCESSLIST 。
  没有发现任何锁定的现象。
  修改表存储引擎:
  alter table tmp002 ENGINE=MYISAM
  受影响的行: 5618288
  时间: 17.510s
  同样是上面的例子
  回话一:
  select SQL_NO_CACHE * from tmp002
  表 tmp002  有5618288 数据 存储引擎时INNODB  ,全部查询出来大约需要5min左右
  回话二:
  update tmp002
  set num=6
  where MreasonId in ('700098','301001' ) limit 10000
  我们首先 执行以下 回话一的 语句 。 再执行回话二。
  我们先回话一直处于执行状态 ,没有返回任何信息 。
  在回话三种执行下 show full PROCESSLIST 。
  13564441 root 192.168.53.41:53312 tempDB Query 2 Locked  update tmp002 set num=6 where MreasonId in ('700098','301001' ) limit 10000
  13564671 root 192.168.53.41:53736 tempDB Query 4 Writing to net select SQL_NO_CACHE * from tmp002
  回话13564441状态为 Locked ,等待锁的释放 。
  综上所述,可以得到下面的结果。
  对于myisam的表select 是会锁定表的 ,会导致其他操作挂起,处于等待状态。
  对于innodb的表select 是不会锁表的。其实这里使用到了快照。快照这里不作讨论。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-603895-1-1.html 上篇帖子: mysql 存储过程简单例子 下篇帖子: mysql kernel: nf_conntrack version 0.5.0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表