事务隔离
最后更新于
可以通过 @Transactional(isolation = Isolation.SERIALIZABLE)
来设置。
事务隔离等级 | 防止的错误 | Spring 中对应的枚举 | 说明 |
---|---|---|---|
注意:事务隔离等级的配置仅在事务创建时有效。
默认
DEFAULT
Spring 默认事务隔离等级取决于 RDBMS 的默认隔离等级。我们知道 MySQL 的默认隔离等级是可重复读取,所以 Spring Data JPA 配合 MySQL 一同使用时,DEFAULT 代表的是可重复读取。
读取未提交
无
READ_UNCOMMITTED
拥有最大的并发量和最差的安全性。
读取已提交
脏读
READ_COMMITTED
只能读取已经提交的数据,可以防止脏读。
可重复读取
脏读、不可重复读
REPEATABLE_READ
MySQL InnoDB 的默认事务隔离等级。
可序列化
脏读、不可重复读、幻读
SERIALIZABLE
最高的事务隔离等级,拥有最差的并发量和最高的安全性。其实就是将并发事务变为非并发,串行地执行,所以能保证绝对不会出现并发带来的错误。