mysql transaction

四种事务隔离级别

  1. read uncommitted(脏读(Dirty Read)) 几乎不被使用,在selelct将会看到各种奇怪的数据现象,当然包括所有事务都可以看到其他未提交事务的执行结果。

  2. read commit,一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的 不可重复读

  3. repeatable read 所有的select在第一次一致读以后 在事务中都会使用一样的数据状态快照。

    update,delete都会使用间隙锁来保证数据的安全。防止幻读 (Phantom Read)。 这是mysql默认的事务隔离级别,确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。

  4. serializable(可串行化) 对数据的要求最为严格,自然也是性能最差的一种隔离级别。

    在所有的select语句中都是默认加了一个lock in share mode的锁
    

简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。

不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。

mysql事务学习

参考资料

参考资料