MyISAM引擎的锁级别是Table(表锁),InnoDB引擎的锁级别是Row(行锁)。表锁的加锁效率高于行锁,意味着并发情况下,行锁要优于表锁。
InnoDB中存在行锁和表锁(通过给所有行加锁),下面举例说下使用行锁和表锁的情况(update语句会获取独占锁)
1)、查看表相关信息以及创建索引;
2)、id为主键(主键索引),使用id作为where条件,不同事务能同时修改不同数据,此时为行锁;
3)、name为普通索引,使用name为where条件,不同事务能同时修改不同数据,此时为行锁;
4)、phone为唯一索引,使用phone作为where条件,不同事务能同时修改不同数据,此时为行锁。
5)、使用money作为where条件,不同事务不能同时修改不同数据,此时为表锁。
InnoDB的行锁实际上是通过给索引项加锁实现的。如果where条件(过滤条件)是通过索引,则进行行锁,否则,进行表锁(所有行加锁)。
如果有写的不对的地方,请大家多多批评指正,非常感谢!