前言:
一直一来都知道mysql的事务操作,但一直都是理论家,
没有实际操作。今天索性就准备把mysql的几种事务隔离级别练习一下,
可当练习到Repeatable Read(可重读)发现了一些问题。
一.概念
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,
会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。
简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,
当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储
引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
二.问题
我一开是是这样验证的,我事务A开始事务,然后查询表,然后直接提交。接着在另一命令行界面
开始事务b,然后更新数据,提交。然后我再事务A窗口查询操作,发现查询数据更改了,很奇怪。
A:
B:
A:
我一开始很气怪,后来查了下。原来事务A开启后,执行查询操作不能直接提交,然后试下了是对的。
A:
B: 最后我仔细查询了资料,原来利用的是MYSQL MVCC 实现机制。具体大家可以继续查询。