MySQL行锁解析(MySql锁机制)

行锁(偏写)

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

事务(行锁支持事务)

事务及其ACID属性
MySQL行锁解析(MySql锁机制)
并发事务处理带来的问题:
更新丢失
MySQL行锁解析(MySql锁机制)
脏读
MySQL行锁解析(MySql锁机制)
不可重复读(解决方式为添加行锁)
MySQL行锁解析(MySql锁机制)
幻读
MySQL行锁解析(MySql锁机制)
事务隔离级别:(MYSQL默认可重复读)
MySQL行锁解析(MySql锁机制)

案例分析:

建表SQL
MySQL行锁解析(MySql锁机制)

行锁定基本演示(添加索引(行锁)不用全表扫描直接定位到行 ,使用主键也是用的行锁)
MySQL行锁解析(MySql锁机制)
不同行更新没有问题

无索引,行锁升级为表锁
varchar类型写成数字让b列索引失效,此时session-2操作不同行也会进入等待
MySQL行锁解析(MySql锁机制)
间隙锁危害
MySQL行锁解析(MySql锁机制)
MySQL行锁解析(MySql锁机制)
面试题:常考如何锁定一行
MySQL行锁解析(MySql锁机制)

案例结论

MySQL行锁解析(MySql锁机制)

行锁分析

MySQL行锁解析(MySql锁机制)
MySQL行锁解析(MySql锁机制)

优化建议

  1. 尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。
  2. 合理设计索引,尽量缩小锁的范围
  3. 尽可能较少检索条件,避免间隙锁
  4. 尽量控制事务大小,减少锁定资源量和时间长度
  5. 尽可能低级别事务隔离