1.Read Uncommited (读未提交)
该隔离级别是指当某个事务操作某个数据后,但是未提交,其他事务访问数据库时,能够访问到已经修改后的数据。此时如果未提交的事务回滚,则其他事务读到的数据是脏数据,这类操作称为脏读。而依据此脏数据进行的业务也会有问题。
2.Read Committed (读提交)
读提交,很显然就是只读取已经提交了的数据。在这种隔离级别下,若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据。当然会发现其他的问题,假设在某个业务操作需要读取两次数据库中得记录,只有两次读取的结果是一致,那么业务才能往下执行。如果第一次和第二次读取间隔当中,其他事务对该数据做了更新(update)操作并完成了提交。这时两次读取的结果就会不一致,导致业务无法正常执行。这类情况称为不可重复读。
3.Repeated Read (可重复读)
很明显该种隔离级别就是为了解决不可重复读而设置的。MySQL默认的级别就是该级别。该级别下是针对更新(update)操作。如果此时删除了记录或者新增了记录,就会导致幻读。比如读取多次读取符合某个条件的记录(多个),在多次读取的过程中其他事务对这些记录进行删除或者新增了符合该条件的记录。这样导致的结果就是多次读取的结果集不一样。
4.Serializable (序列化)
这是事务最高的隔离级别,在该级别下,事务是串行执行的,脏读、不可重复读、幻读都会解决,但是性能耗费大,一般不常使用。