一.innodb行锁的实现
1.innodb的行锁是通过给索引的索引项加锁来实现的
2.innodb按照辅助索引进行数据操作时,辅助索引和主键索引都将锁定指定的索引项
3.通过索引进行数据检索时,innodb才使用行级锁,否则innodb将使用表锁
二.举例说明
1.这边有一张表,id为主键,name为普通字段
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200927144943489.png#pic_center)
2.当用主键id来进行数据检索时,其余行仍然可以操作
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020092714543429.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FwcGxlX0FuZHk=,size_16,color_FFFFFF,t_70#pic_center)
3.另一个线程仍然可以操作id=1的数据,因为它只锁住了id=6这一列
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200927145538231.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FwcGxlX0FuZHk=,size_16,color_FFFFFF,t_70#pic_center)
4.当用非索引的字段来进行数据检索时,此时会升级为表锁,其余列就不能操作了
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200927150016186.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FwcGxlX0FuZHk=,size_16,color_FFFFFF,t_70#pic_center)
此时再查询name=王五的时候,就被阻塞了
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200927150143830.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FwcGxlX0FuZHk=,size_16,color_FFFFFF,t_70#pic_center)