关于Oracle中read only Transaction

大家都比较知道在Oracle中可以设置事务的隔离级别,其中有一个级别是read only.

read-only
遵从事务级的读一致性,仅仅能看见在本事务开始前由其它事务提交的更改。
不允许在本事务中进行DML操作。
read only是serializable的子集。它们都避免了非重复读和幻像。
区别是在read only中是只读;而在serializable中可以进行DML操作。

看到这段解释,有的朋友就遇到问题了,主要是针对“不允许在本事务中进行DML操作”的疑惑。
(备注:先在很多同志写的资料啊,BOOK啊,都写的很含糊,不尽然,所以很容易给有些朋友
带来疑惑)

比如:
SQL> conn /as sysdba
已连接。
SQL> create table toms(no int);

表已创建。

SQL> set transaction read only;

事务处理集。

SQL> insert into toms values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from toms;

NO
----------
1

其实,Oracle在相关的doc上已经做了声明

READ ONLY
This clause is not supported for the user SYS. That is, queries by SYS will return changes
made during the transaction even if SYS has set the transaction to be READ ONLY.


所以大家今后遇到这个问题也就不必再疑惑了。再次奉劝大家,有时间还是要看官方的doc,特别是刚开始学习Oracle的同志[虽然阅读e文虽有点困难,但学习的比较系统、全面,"大侠"们写的东西,我个人认为不合适初学者,因为你这个时候还没有分辨能力,而大侠的作品又不可能写的那么全面细致,他们更多的注重的是思路、方法和一些关键步骤,可以说是眼高手疏吧。哈哈]

相关连接:Oracle中如何查询事务/会话的ISOLATION LEVEL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值