本文主要是介绍Mysql 行级锁读锁/写锁加锁时机以及如何避免行锁升级为表锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里只讲innodb RR(可重复读)级别下:
--手动加行读锁:select * from tablename where id =1 lock in share mode
--手动加行写锁:select * from tablename where id =1 for update
自动加行锁的情况,当使用update 和delete 是where查询命中索引时(其实间隙锁也是这个道理只是查询条件变成了范围或命中了多行)
行锁升表锁:
1.如果update 和delete没有命中索引则会出现行锁升级为表锁(间隙锁锁住了所有行)
2.手动加锁时where条件为命中索引
注意:开发中要避免 行锁升表锁 效率低且容易出现表死锁
补充 行锁record lock 间隙锁gap lock
间隙锁 是锁住一个区间,区间类更改会阻塞
还有next - key 锁 (组合锁)
next - key 锁 = record lock(行锁 ) + gap锁
这篇关于Mysql 行级锁读锁/写锁加锁时机以及如何避免行锁升级为表锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!