InnoDB支持事务,InnoDB默认使用行级锁。
默认是行级锁,但有些情况,就会变成表级锁。下面用update的例子进行说明,表和数据如下:
一张用户信息表,ID是主键(主键默认带有索引)

表中有两条数据

行级锁
在innodb中只有利用索引的更新,删除操作,才可以使用行级锁。
同时在navicat中打开两个窗口,SQL语句如下:

在窗口1中执行begin开启事物,然后执行update操作,先不执行commit。
然后切换到窗口2中,执行begin开启事物,然后执行update操作。

此时发现窗口2中的update是可以执行的,没有因为窗口1中的事物没有提交而等待。说明用到的是行级锁。
表级锁
在innodb中,不能使用索引的写操作则是表锁。
修改表设计,把ID的主键去掉,此时ID字段就没有索引了。

去掉主键后,点击保存按钮。
下面进行SQL演示,打开两个命令窗口,操作如下:
在窗口1中执行begin开启事物,然后执行update操作,先不执行commit。

然后切换到窗口2中,执行begin开启事物,然后执行update操作。

此时可以看到,update操作一直处于阻塞状态,没有完成。
切回窗口1,执行commit命令。

执行完毕,切换到窗口2,此时update语句才执行完成

由此可以看出,当窗口1的事物没有提交时,窗口2的更新操作一直处于阻塞状态,虽然窗口2更新的记录与窗口1更新的记录不是同一条。也就说明,当写操作时,未使用索引的操作则是表锁。