mysql中锁(全局锁和表级锁)【mysql每日一讲】

                                                   mysql的锁


锁的作用:在并行多线程运行的情况下,制定的访问数据库的规则。

锁的分类
1、全局锁:锁住整个库,锁定期间只能查询,不能更新
缺点:在业务繁忙的时候,不允许锁库。
全局锁主要用于备份数据库,而不影响对原库的业务访问。
InnoDB引擎,支持在可以更新的情况下,备份。
mysqldump -single-transaction XXX
强烈建议使用InoDB的这种写法。

2、表级锁:对表加锁,这种用的比较少。
(1)表锁:lock tables 只能读,不能其他操作,用的很少。InnoDB支持行锁,表锁粒度太大,所以InoDB中用的很少。
(2)元数据锁MDL锁(默认加的锁):隐式的,从mysql5.5后引入的

读锁:MDL锁在增删该查的时候用的是读锁,

写锁:在对数据表字段进行增减,或者新增更新索引的时候用的是写锁,这都是默认的。

读锁跟读锁之间不互斥。而跟写锁有关的都是互斥的。

所以多个线程同时对一张表进行增删改查,但是变更表结构的时候就不能同时进行了。


例如:A事务在查询(未提交),B事务在删除(未提交)C事务在DDL(新增列),这时候A,B事务分别拿着读锁,而C事务拿着写锁,这样A,B事务只有提交完事务,C事务才能往下走,因为读锁跟写锁是互斥的。
可以多个线程同时对一张表进行增删改查,但是变更表结构的时候就不能同时进行了。

血的案例:
对一个小表做DDL,整个表都无法访问了。客户端A正在查询小表t,客户端B在删除t表的一些记录,客户端C在给t表增加新列,后面还有很多客户端操作。假如客户端A\B都是长事务,这样客户端C之后的所有访问都无法完成了,阻塞了。所以要避免长事务

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值