事务隔离级别就是为了解决脏读、幻读、不可重复读着这几个问题而产生的,但是事务隔离级别不同,产生的问题也不同,因此很多时候必须在并发性一个权衡,所以设立了几种事务隔离级别,以便让不同的项目可以根据自己项目的并发情况选择合适的事务隔离级别。事务隔离级别有四种,不过种:
DEFAULT:默认隔离级别,意思是默认使用数据库的隔离级别;每种数据库支持的事务隔离级别不一样,Oracle默认(读已提交) Mysql默认(可重复读)。
READ_UNCOMMITTED:读未提交,即能够读取到没有被提交的数据,这是隔离性最低的一种隔离级别,无法解决脏读、不可重复读、幻读问题
READ_COMMITED:读已提交,即能够读到那些已经提交的数据,能够防止脏读,避免不了幻读和不可重复读。
REPEATABLE_READ:可重复读,解决脏读和不可重复读的问题,但是其无法解决幻读。
SERLALIZABLE:串行化,提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行,故此性能很低
如果spring设置的隔离级别和数据库不一致会怎样?
会优先使用数据库的隔离级别,如果spring事务隔离级别和数据库的数据库的隔离级别有冲突,例如某些数据库不支持串行化时,事务执行时会抛异常。
Spring 通过 JDBC 的 Connection.getTransactionIsolation() 方法获取数据库的默认隔离级别