(1)简述:
MySQL默认设置的事务隔离级别都是 RR 级别,而且MySQL的RR级别是可以避免幻读发生的,这点是MySQL的RR级别的语义跟SQL标准的RR级别的不同,因为SQL标准里规定RR级别是可以发生
幻读的,但是MySQL的RR级别避免了。
也就是说,MySQL里的执行事务,默认情况下不会发生,脏读,脏写,不可重复读,幻读的问题,事务的执行都是并行的,互不影响,不会读到没提交事务修改的值,修改了值还提交了也不会
读到,即使插入一行值还提交了,也不会读到,总之,事务之间互相不影响。
(2)MySQL事务隔离级别:
修改MySQL的默认事务隔离级别:
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL level
(level的值可以是REPEATABLE READ,READ COMMITTED,READ UNCOMMITTED,SERIALIZABLE几种级别。)
一般来说,不用修改这个级别,默认的RR 保证每个事务没别的事务干扰。
(3)Spring的@Transactional注解 处理事务隔离级别:
在@Transactional注解里有一个isolation参数,这个可以设置事务隔离级别,@Transactional(isolation=isolation.DEFAULT),DEFAULT就是MySQL默认支持什么隔离级别就是什么
隔离级别,也可以手动修改,isolation.READ_UNCOMMITTED,isolation.READ_COMMITTED,isolation.REPEATABLE_READ,isolation.SERIALIZABLE
(4)总结:
MySQL默认的RR级别隔离机制挺好的,没必要修改。除非事务执行期间多次查询的时候,必须查询别的已提交事务修改过的最新值,如果有这个业务需求可以修改默认隔离级别。
MySQL默认的事务隔离级别使用的RR,可以避免 脏写,脏读,不可重复读,幻读