1、innoDB行锁的实现方法
innoDB行锁是通过给索引上的索引项加锁来实现的。
这一点MySQL与Oracle不同,Oracle是通过在数据块中对相应数据行加锁来实现的。
2、行锁的各种注意事项
2-1、只有通过索引项检索数据,InnoDB才使用行级锁,否则,InnoDB将使用锁整张表。
不注意这一点的话,可能导致发生大面积的锁等待,影响系统并发性能。
2-2、如果多条记录的索引值相同,那么这些记录会出现锁冲突
2-3、当表有多个索引的时候,不同的事务可以使用不同的索引锁定不同的行
2-4、即使使用了索引来加行锁,也有可能演变成表锁
这种情况发生的概率较低,但确实有可能发生。
因为MySQL有自己的查询优化策略,会自行调整SQL的执行计划。一旦MySQL认为全表扫描的效率更高,就会不走索引,那么行锁就变成了表锁。
排查问题的时候需要注意检查这一点。