《mysql基础》6-锁

Mysql的锁是为了处理并发添加的锁概念。java开发中也会用到锁概念,其实锁跟并发是孪生子。有并发那就要考虑数据的ACID。锁能够保证并发时的串行。

那Java中的锁有重量级锁,轻量级锁,还有偏向锁等概念。

mysql中也有1-全局锁,2-表级锁,3-行锁的概念

1-全局锁。flush-table-with-read-lock.(FTWRL)命令给数据库添加全局锁,这样的话,所有的事务都只能读,不能修改数据。一般用于数据备份的时候,所有的更新操作-表修改/删除操作都会被阻塞。全局锁锁定之后,所有的修改操作都不能执行,这样的操作很危险:01:主库不能进行业务操作,系统停摆,02-从库不能即使同步binLog,主从数据不同步。

所以在支持事务的数据库引擎中,可以使用我们之前讲到的可重复读隔离级别这一概念代替全局锁,但是前提是数据库引擎要支持事务,所以InnoDB代替MySAM的原因之一。

2-表级锁

2.1 元数据锁-meta data lock MDL ,mysql5.5加了MDL。该锁的主要用出是防止多个事务同时修改表的元数据,比如column信息。当然MDL分为读写锁

需要注意的是,在读取表数据的时候,也要申请表的MDL read锁,比如

session A read t1,那么sessionA 就拥有t1的MDL read锁。

session B write t1,需要申请t1的MDL write 锁,会被阻塞。

那session C read t1. 就会被session B阻塞。如果这个时候,t1的查询频繁,且有异常重试机制,就会很快把数据库线程撑满。

2.2 表锁锁住整个表,多个事务串行。但是有个重要的点要注意

tr1事务 lock a read, lock b write 。那么tr1事务只有a的读锁,没有写锁,其他事务对a的写就会被阻塞。其他事务对b的read也会被阻塞。所以表锁的返回还是太大。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值