mysql事务测试及delete和update是使用行级锁,还是表级锁
mysql5.5版本以上默认的引擎是InnoDB,5.5以下,默认引擎是MYISAM,根本还是要根据引擎的不同去考虑。
InnoDB和MyISam区别:
| 区别项 | Innodb | myisam |
|---|---|---|
| 事务 | 支持 | 不支持 |
| 锁粒度 | 行锁,适合高并发 | 表锁,不适合高并发 |
| 是否默认 | 默认 | 非默认 |
| 支持外键 | 支持外键 | 不支持 |
| 适合场景 | 读写均衡,写大于读场景,需要事务 | 读多写少场景,不需要事务 |
| 全文索引 | 不支持,可以通过插件实现, 更多使用ElasticSearch | 支持全文索引 |

有如下表:

表中的数据有:

开启事务(begin),执行更新语句,将'user_name'全部更新为'woxbwo',但不提交(commit)事务:

在事务内查询:

事物外查询,新开一个窗口查询:

可以发现,事务外查到的数据author没有发生改变
提交事务:

顺便测试MySQL插入是表级锁还是行级锁
开启事务,插入数据,但不提交事务

查看事务内数据

查看事务外数据

在另外一个窗口,再次插入一条数据,并查看数据;

再查看事务内数据:

提交事务,并查看。

上述测试过程可以看出,mysql使用innodb引擎时,插入数据(insert)没有锁
测试delete和update过程
查看数据:

开启事务,删除id=1的行 但不提交数据:

在另外一个窗口也删除id=1的行,会发生生么样的情况呢?

会发现处于等待状态
那么在这种情况下,我们是否能够删除其他的行呢,我们再开一个窗口删除id=2的行,试试

照样能删除,说明删除没使用表级锁。
我们提交事务发现:


综上所属:delete是使用行级锁的,update也是实现行级锁的。同理可测;
大数据成长史

浙公网安备 33010602011771号