采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
未使用索引时,加的是行锁(每一行都加锁)?还是行锁(每一行都加锁)和gap锁?还是表锁?
使用索引但未命中时,加的是行锁(每一行都加锁)和gap锁?
老师能回答下吗?我看有其它同学也问了类似的问题。但是写的太多了。没太整明白。
同学好,innodb的话
不走索引的时候,走的是表锁(插入除外,插入会有插入意向锁,该锁在insert操作时产生。在多事务同时写入不同数据至同一索引间隙的时候,并不需要等待其他事务完成,不会发生锁等待。假设有一个记录索引包含键值4和7,不同的事务分别插入5和6,每个事务都会产生一个加在4-7之间的插入意向锁,获取在插入行上的排它锁,但是不会被互相锁住,因为数据行并不冲突。)
使用索引未命中,就是next-key锁,也就是行锁(每一行都加锁)和gap锁
不走索引的时候,,老师说的表锁 RC模式下,表锁=全表行锁 RR模式下,表锁=全表行锁+gap锁 老师我理解的有问题吗,我测试了一下好像是这样的。
同学好,这个表锁我理解在不同模式下表示的行为不同,但是具体实现不是逐行加锁或者用gap锁这么粗暴,mysql官方文档上的原话是说innodb支持表锁和行锁,也就是说它是可以锁表的,因此它的表锁实现虽然不像myisam,也不是简单地组合行锁和gap锁,是有它自己的实现逻辑的,具体需要看源码领悟才可以:)
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.8k 27
2.7k 22
1.3k 15
1.4k 14
1.3k 14