MySQL行锁解析(MySql锁机制)

行锁(偏写)

特点:
偏向InnoDB存储引擎,开锁大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁。

事务(行锁支持事务)

事务及其ACID属性
在这里插入图片描述
并发事务处理带来的问题:
更新丢失
在这里插入图片描述
脏读
在这里插入图片描述
不可重复读(解决方式为添加行锁)
在这里插入图片描述
幻读
在这里插入图片描述
事务隔离级别:(MYSQL默认可重复读)
在这里插入图片描述

案例分析:

建表SQL
在这里插入图片描述

行锁定基本演示(添加索引(行锁)不用全表扫描直接定位到行 ,使用主键也是用的行锁)
在这里插入图片描述
不同行更新没有问题

无索引,行锁升级为表锁
varchar类型写成数字让b列索引失效,此时session-2操作不同行也会进入等待
在这里插入图片描述
间隙锁危害
在这里插入图片描述
在这里插入图片描述
面试题:常考如何锁定一行
在这里插入图片描述

案例结论

在这里插入图片描述

行锁分析

在这里插入图片描述
在这里插入图片描述

优化建议

  1. 尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。
  2. 合理设计索引,尽量缩小锁的范围
  3. 尽可能较少检索条件,避免间隙锁
  4. 尽量控制事务大小,减少锁定资源量和时间长度
  5. 尽可能低级别事务隔离
发布了217 篇原创文章 · 获赞 125 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104204053