读未提交
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果,
读取未提交的数据,也被称之为脏读。
读已提交
大多数数据库默认隔离级别,但是不是MySql默认的。一个事务只能看见已经提交事务所作的改变,这种隔离级别,也支持所谓的不可重复读,因为同一事务的其他实例在该实例处理期间可能会有新的commit。所以同一个select可能会返回不同的结果。
可重复读
Mysql默认事务隔离级别。它确保同一事务的多个实例在并发读取数据时,会看到同样的数据。不过理论上,这个会导致一个棘手的问题:幻读。简单来说,幻读指当用户读取某一范围的数据行时,另外一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的幻影行。InnoDB通过多版本并发控制MVCC机制解决了该问题。
串行化
这是最高的隔离级别。它通过强制事务排序,使之不可能相互冲突,从而解决幻读的问题。简而言之,他是再每个读的数据行上加上共享锁,再这个级别,可能导致大量的超时现象和锁竞争。
可能出现的问题:
脏读
某个事务更新一份数据,另外一个事务在此时读取了同一份数据,由于某些原因,前一个Rollback了操作,而后一个事务所读取的数据就会是不正确的。
不可重复读
在一个事务的两次查询之中数据不一致,可能是两次查询过程中插入了一个事务更新原有的数据
幻读
在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列的数据,而另外一个事务此时插入了几列数据,先前的事务在接下来的查询中,就有几列是未查询出来的,如果此时插入和另外一个事务插入的数据,就会报错。
