innoDB的锁机制
预备知识
锁是为了解决并发事务中资源冲突而存在的。
每种引擎的锁不一样,说锁的时候要基于引擎而定。例如myisam引擎只有表锁没有行锁。innoDB有表锁也有行锁。
锁的粒度越大,开销越小,并发性越小。
innoDB都有哪些锁?
概念
表等待 vs 死锁
两个概念不一样!
表等待指的是:事务等待的锁,被其他事务占用,在规定时间内(innodb_lock_wait_timeout)没有等到锁释放,提示锁超时的现象。
死锁指的是:事务之间等待的锁被其他事务占用,同时也占用了其他事务需要的锁,各个事务互相等待,卡死状态。通俗理解:“我占着你要的锁导致你不能正常干活,你占着我要的锁导致我不能正常干活,大家都卡着别玩了”
行锁
record lock
gap lock
next-key lock
锁的兼容性