bleer

欢迎你来到我的空间哦~

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

innoDB的锁机制

预备知识

锁是为了解决并发事务中资源冲突而存在的。

每种引擎的锁不一样,说锁的时候要基于引擎而定。例如myisam引擎只有表锁没有行锁。innoDB有表锁也有行锁。

锁的粒度越大,开销越小,并发性越小。

innoDB都有哪些锁?

 

概念 

表等待 vs 死锁

两个概念不一样!

表等待指的是:事务等待的锁,被其他事务占用,在规定时间内(innodb_lock_wait_timeout)没有等到锁释放,提示锁超时的现象。

死锁指的是:事务之间等待的锁被其他事务占用,同时也占用了其他事务需要的锁,各个事务互相等待,卡死状态。通俗理解:“我占着你要的锁导致你不能正常干活,你占着我要的锁导致我不能正常干活,大家都卡着别玩了”

乐观锁 vs 悲观锁

乐观锁和悲观锁是一种概念,不是指具体的锁。

悲观锁:拿数据时很小心,总是认为别人会改动,所以每次都要加锁。

乐观锁:拿数据时,认为别人不改动数据,不加锁,使用版本号机制。

乐观锁和悲观锁有各自的应用场景。不能一概而论哪种锁更好。例如悲观锁适用于写场景,乐观锁适用于读并发高的场景。

参考:https://www.jianshu.com/p/2b113ca4bfa1

 

 

行锁

record lock

gap lock

next-key lock

 

意向锁

 

参考:https://www.jianshu.com/p/38dd4f64ebd1

 

 

 

 

锁的兼容性

 

 

 

参考

https://blog.51cto.com/fengfeng688/2150014

posted on 2020-05-27 21:08  bleer  阅读(147)  评论(0编辑  收藏  举报