一共四种,由低到高:Read uncommitted、Read Committed、Repeatable read、Serializable。在事务的并发操作中可能会出现读脏数据,不可重复读,幻读,序列化。
读未提交(最低级别,任何情况都无法保证),一个事务可以读取另一个未提交事务的数据。
读提交(可避免脏读),就是一个事务要等另外一个事务提交后才能读取数据。
重复读(可避免脏读和不可重复读),就是在开始读取数据时,不再允许修改数据的操作。
Serializable(可避免脏读、不可重复读、幻读),是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是该事务隔离级别效率低下,比较消耗数据库性能,一般不使用。
小tips:大多数数据库默认的事务隔离级别是Read committed,如Sql Server,Oracle。Mysql的默认隔离界别是Repeatable read。
小tips:隔离级别的设置只对当前链接有效。对于使用MySQL命令窗口而言,一个窗口就相当于一个链接,当前窗口设置的隔离级别只对当前窗口的事务有效;对于JDBC操作数据库来说,一个Connection对象相当于一个链接,而对于与Connection对象设置的隔离级别只对该Connection对象有效,与其他链接Connection对象无关。
小tips:设置数据库的隔离级别一定要是在开启事务之前。