事务隔离级别
事务隔离级别包含如下几种:
- 未提交读:在 READ UNCOMMITTED 级别,事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称为脏读(Dirty Read )
- 已提交读:大多数数据库系统默认的隔离级别都是 READ COMMITTED (但 MySQL 不是),一个
事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的 。 - 可重复读:解决了脏读的问题。该级别保证了在同一事务中多次读取同样记录的结果是一致的。但无
法解决幻读(Phantom Read)的问题,所谓幻读,指的是当某个事务在读取某个范围内
的记录时,会产生幻行。 InnoDB 和 XtraDB 存储引擎通过多版本并发控制 MVCC 解决了
幻读的问题。 - 序列化:SERIALIZABLE 是最高的隔离级别。它通过强制事务串行执行,避免了前面说的幻读的问
题。 SERIALIZABLE 会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用
的问题,实际中很少使用
Oracle
Oracle的默认事务隔离级别是读未提交;
MySQL
MySQL默认的事务隔离是可重复读;
Spring的声明式事务
Spring的声明式事务和Hibernate中的Open Session In View(在Spring JPA中介绍)。