MySQL死锁和锁冲突有什么区别?

MySQL有行级锁,表级锁,下面是他们的区别

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

现在我有几个问题:

1.为什么行级锁会出现死锁而表级锁不会,怎么理解?

2.为什么行级锁发生锁冲突低而表级锁高,怎么理解?

3.死锁与锁冲突概念如何理解?区别是啥?

阅读 4.3k
2 个回答
  1. 为什么行级锁会出现死锁而表级锁不会

    表级锁一般是指的 MyISAM 存储引擎,因为它会一次性获取所有需要的锁,所以要么全部都满足,要不就一个都没有,因此不会产生死锁。而行锁就不同了,如果 A 操作先对记录 1 加锁,然后对 2 加锁,B操作先对记录 2 加锁,后对1 加锁,这样就会产生一种情况,A 对 1 加锁,B 对 2 加锁,然后 A 等待 B 释放记录 2 的锁,B 则等待 A 释放 1 的锁,互相等待,就产生死锁了。

  2. 为什么行级锁发生锁冲突低而表级锁高,怎么理解

    行锁只对操作的记录加锁,而同时操作同一条记录的概率是很低的,因此出现索冲突的概率也是很低的,而表锁不一样了,同时访问一个表的概率一般会很高,一次把整个表都锁了,所有对同一个表的操作都只能等待其它操作释放锁,因此冲突比较高

  3. 死锁与锁冲突概念如何理解?区别是啥?

    死锁是两个锁互相等待,互不相让,然后大家就都僵持在那里了。锁冲突则是一种正常现象,我需要加锁,但是现在别人持有锁,我无法完成加锁操作,这就是冲突,但是我可以等待别人释放了之后重新加锁。

新手上路,请多包涵

mysql的一个会话无法同时获得两个表锁,所以保证了无法死锁

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题