Mysql中锁相关解读

        以下是个人对mysql数据库中锁相关的一些理解,其中如MVCC、next-key锁等具体的解释请搜索相关资料。数据库中的锁并不能用于保证在并发情况下业务数据的安全,还是需要在程序中控制数据的并发操作。

1、锁的区别
共享锁(读锁、s锁)和排他锁(写锁、x锁)是指加锁的类型(不同作用)。
乐观锁和悲观锁是指加锁的方式(不同判断)。

2、锁的粒度
表锁是Mysql中最基本的锁策略,并且是开销最小的策略。
行级锁可以最大程度的支持并发处理。行级锁只在存储引擎层实现,而Mysql服务层没有实现。myisam不支持行级锁,innodb支持行级锁。

3、InnoDB中的锁
innodb中读、写锁都属于悲观锁,innodb中以MVCC的方式实现乐观锁。
innodb中读、写锁又分为记录锁、间隙锁、next-key锁,指加锁的索引位置。
innodb中使用MVCC可实现读提交和可重复读的事务隔离级别。MVCC分快照读和当前读,在可重复读级别时,innodb利用MVCC和undo-log避免快照读的幻读,而当前读还需要加next-key锁才能避免幻读。

4、死锁
死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。
数据库系统实现了各种死锁检测和死锁超时机制,innodb若检测到死锁的循环依赖就会立即返回一个错误,若出现死锁,innodb将持有最少行级写锁的事务进行回滚。
查看死锁:开启innodb_lock_monitor后,再使用"showengine innodb status"查看,能够找到锁阻塞的根因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值