在项目中看到@Transactional(readOnly=true)注解(该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true)),了解到是只读事务,网上搜了下只读事务和没有事务的区别,整理如下:
Oracle默认情况下(没有事务) 保证了SQL语句级别的读一致性,即在一条SQL语句执行期间,它只会看到执行前点的数据状态,而不会看到执行期间数据被其他SQL改变的状态。
所以如果执行多条SQL的时候呢?比如你做一个报表查询,在执行完第一条sql的时候,执行第二条查询SQL,而这个之间有数据被改变了,第二条数据查询就有可能不一致
而Oracle的只读查询则保证了事务级别的读一致性,即在该事务范围内执行的多条SQL都只会看到执行前点的数据状态,而不会看到事务期间的任何被其他 SQL改变的状态。
没有事务的时候,在执行一条sql语句看到执行前点的数据状态,保证数据一致性
只读事务,在执行多条sql语句看到执行前点的数据状态,保证数据一致性
本文解析了Oracle中只读事务与非事务环境下数据一致性的区别。只读事务能确保在整个事务过程中,所有查询都看到开始时刻的数据状态,不受外部更改的影响。
20万+

被折叠的 条评论
为什么被折叠?



