mysql 实验论证 innodb表级锁与行级锁

innodb 的行锁是在有索引的情况下,没有索引的表是锁定全表的.

表锁演示(无索引)

操作1

mysql 实验论证 innodb表级锁与行级锁_第1张图片

操作2

mysql 实验论证 innodb表级锁与行级锁_第2张图片

处于等待状态....

再回到操作1 commit以后,操作2就出来结果了(锁定了8秒,过了6秒左右才去session1提交)。

mysql 实验论证 innodb表级锁与行级锁_第3张图片

实验结果是:

我在操作1的for update 操作看似只锁定ID为2的行其实锁定了全表,以至于后面操作2的对ID为1的行update 需要等待操作1锁的释放。

行锁演示(索引为ID)

增加索引:

mysql 实验论证 innodb表级锁与行级锁_第4张图片

 

mysql 实验论证 innodb表级锁与行级锁_第5张图片

mysql 实验论证 innodb表级锁与行级锁_第6张图片

实验结果:

这次的锁定是锁定的行,所以没有被锁定的行(ID不为2的行)可以进行update..

转载于:https://my.oschina.net/u/2364788/blog/3078428

你可能感兴趣的:(mysql 实验论证 innodb表级锁与行级锁)