第一种 read uncommitted 此状态下脏读,不可重复读,虚读都有可能发生。此状态下两我的同时操做一个数据库表一边开启事务没有提交,另外一边也开启事物开始更改数据可是也没有提交,此时第一个操做数据库的人在没有提交的状况下会看到另外一边没有提交的数据,此时若第二我的不提交直接rollback数据回滚就会使数据变回原来的,这就是脏读。举例说用这种方式转帐就很不安全,第一我的没有关闭事物就去查询帐户发现钱多了,可是转帐的人并无提交,此时转帐的人若是采用数据回滚就会使原本转好的钱回来。数据库
第二种 read committed 此状态下避免了脏读,可是不可重复读,虚读都有可能发生。补充一点,这种事务隔离级别是oracle默认的。避免不可重复读,顾名思义,就是为了使第一我的在没有提交事物以前读取到的数据不可变,第二我的不管事物提没提交事物只要第一我的没有提交数据,那么第一我的查询到的数据都不会改变。安全
第三种是 repeatable read 此状态下避免了脏读,不可重复读,可是虚读是有可能发生。这种事物隔离级别是MySQL默认的,插入和修改数据只有在第一我的提交以后才能够查到,避免了数据的变更。oracle
第四种是 serializable 此状态下避免了全部得问题可是效率下降了,一我的操做数据库的时候别人是没法修改的。spa
总结:线程
l 脏读:指一个线程中的事务读取到了另一个线程中未提交的数据。事务
l 不可重复读:指一个线程中的事务读取到了另一个线程中提交的update的数据。it
l 虚读:指一个线程中的事务读取到了另一个线程中提交的insert的数据table