暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL-可重复读

字痕随行 2018-11-18
316

本文基于MySQL的数据库引擎InnoDB,通过本文了解:

  1. 可重复读。


首先,要了解的是,MySQL的事务默认隔离级别是:可重复读,即:在事务执行期间会锁定该事务以任何方式引用的所有行。


其它事务做更新时:

 1#第一个事务
2START TRANSACTION;
3#第一步,第二个事务插入前查询
4SELECT * FROM test2;
5#第四步,第二个事务插入后查询
6SELECT * FROM test2;
7#第六步,第二个事务提交后查询
8SELECT * FROM test2;
9#第七步,提交事务
10COMMIT;

复制
1#第二个事务
2START TRANSACTION;
3#第二步,更新一条已存在的数据
4UPDATE test2 SET sum_count = sum_count + 1 WHERE id = '1111';
5#第三步,查询更新后的数据
6SELECT * FROM test2;
7#第五步,提交事务
8COMMIT;

复制


第一个事务,第一步查询

第二个事务,第三步查询

第一个事务,第四步查询

第一个事务,第六步查询

结论:其他事务做更新时,当前事务查询的结果:不变。


其它事务做插入时:

 1#第一个事务
2START TRANSACTION;
3#第一步,第二个事务更新前查询
4SELECT * FROM test2;
5#第四步,第二个事务更新后查询
6SELECT * FROM test2;
7#第六步,第二个事务提交后查询
8SELECT * FROM test2;
9#第七步,提交事务
10COMMIT;

复制
1#第二个事务
2START TRANSACTION;
3#第二步,插入一条的数据
4INSERT INTO `test2` (`id``name``sum_count`VALUES ('3333''3333''1');
5#第三步,查询更新后的数据
6SELECT * FROM test2;
7#第五步,提交事务
8COMMIT;

复制


第一个事务,第一步查询

第二个事务,第三步查询

第一个事务,第四步查询

第一个事务,第六步查询

结论:其他事务做插入时,当前事务查询的结果:不变。


其它事务做删除时:

 1#第一个事务
2START TRANSACTION;
3#第一步,第二个事务插入前查询
4SELECT * FROM test2;
5#第四步,第二个事务插入后查询
6SELECT * FROM test2;
7#第六步,第二个事务提交后查询
8SELECT * FROM test2;
9#第七步,提交事务
10COMMIT;

复制
1#第二个事务
2START TRANSACTION;
3#第二步,插入一条的数据
4DELETE FROM test2 WHERE id = '3333';
5#第三步,查询更新后的数据
6SELECT * FROM test2;
7#第五步,提交事务
8COMMIT;

复制


第一个事务,第一步查询

第二个事务,第三步查询

第一个事务,第四步查询

第一个事务,第六步查询

结论:其他事务做删除时,当前事务查询的结果:不变。


以上是MySQL可重复读的测试示例及结论,下一次再说说MySQL幻读。




文章转载自字痕随行,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论