将当前事务设置为只读模式。在该模式下所发出的查询,都是查询的设置事务只读模式时的数据状态(通过一致性读取实现)。比如我在 session 1 中设置事务为只读模式:
-- session 1
SQL> set transaction read only;
事务处理集。
SQL> select * from test1;
A B
-------------------- ----------
test1 99
test1 1010
test1 1111
test1 1212
test1 1313
tianyc 6666
已选择6行。
在 session 2 中,我修改 test1 中数据,并提交:
-- session 2
SQL> insert into test1 values('new', 9999);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from test1;
A B
-------------------- ----------
test1 99
test1 1010
test1 1111
test1 1212
test1 1313
tianyc 6666
new 9999
已选择7行。
此时,虽然事务已经持久化到数据库中了,但在 session 1 中查询到的仍是 6 条数据:
-- session 1
SQL> set transaction read only;
事务处理集。
SQL> select * from test1;
A B
-------------------- ----------
test1 99
test1 1010
test1 1111
test1 1212
test1 1313
tianyc 6666
已选择6行。
这个功能有什么用处呢?当你要做多个报表时,为了构造一致的数据,避免由于制作报表期间数据被更新而导致不平衡的数据出现,可以设置你的事务为只读模式