Mysql中InnoDB支持四种事务隔离级别

  1. read uncommited:读到未提交数据
  2. read committed:不可重复读
  3. repeatable read:可重读、读提交
  4. serializable:串行事务

mysql默认设置的隔离级别是repeatable read(可重复读)

读未提交

MYSQL事务隔离是依靠锁来实现的,而未读提交是不加锁的,所以性能是最好的。

任何事务队数据的修改都会第一时间暴露给其他的事务,即使事务还没有提交。

读未提交,其实就是可以读到其他事务未提交的数据,但没有保证你读到的数据最终一定是提交之后的数据,如果中间发生回滚,那就回出现脏数据的问题。

可重读

可重读指的是在一个事务内,最开始读到了数据和事务结束前的任意时刻读到的同一批数据都是一致的。也就是事务不会读到其他事务对已有数据的修改,即使其他事务已经提交。但是,对于其他事务新插入的数据时可以读到的,这也就引发了幻读的问题。

不可重复读

对比可重复读,不可重复读指的是在同一事务内,不同的时刻读到的同一数据可能是不一样的,可能会受到其他事务的影响,比如其他事务改了这批数据并提交了。也就一个事务只能读到其他事务已经提交过的数据,也就是其他事务调用了commit命令之后的数据。

串行化

串行化是四种事务隔离级别中效果最好的,它将事务变为顺序执行,与其他的三个隔离级别相比,它就相当于单线程 ,后一个事务必须等待前一个事务结束