Mysql如何修改事务隔离级别
1.查询事务级别
1.1查询全局事务隔离级别
select @@global.tx_isolation;
1.2 查询当前会话事务隔离级别
select @@session.tx_isolation;
2.修改事务隔离级别
2.1 修改全局事务隔离级别
set global transaction isolation level read committed;
select @@global.tx_isolation;
2.2 修改当前会话隔离级别
set session transaction isolation level read committed;
select @@session.tx_isolation;
3.事务隔离级别:
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read uncommitted) | 是 | 是 | 是 |
不可重复读(read committed) | 否 | 是 | 是 |
可重复读(repeatable read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
4.文中数据库版本
Spring事务的隔离级别
Spring事务由 @Transactional 注解实现,隔离级别由它的参数 isolation 控制,Isolation 的 Eum 类中定义了“五个”表示隔离级别的值,如下所示。
Isolation.DEFAULT 是 PlatfromTransactionManager 默认的隔离级别,它的含义是:使用数据库默认的事务隔离级别。
除此之外,另外四个与 JDBC 的隔离级别是相对应的,就好像 Java 里的重写一样,所以说,Spring事务隔离级别是在数据库隔离级别之上又进一步进行了封装。
如果不一致会怎么样?既然是封装,那么Spring项目应该就是以Spring事务为准的,除非使用 @Transactional(isolation = Isolation.DEFAULT)时,才会使用数据库设置的隔离级别。可以理解为,spring事务设置的隔离级别是在会话级别上修改数据库当前会话的隔离级别。