只读事务还是只读模式

[url]http://san-yun.iteye.com/blog/494405[/url]
“事务隔离级别(transaction isolation degree)”,ANSI标准定义了4个隔离级别标准:

READ UNCOMMITTED:最低级别的隔离,通常又称为dirty read,它允许一个事务读取还没commit的数据,这样可能会提高性能,但是dirty read可能不是我们想要的。【[b]可以读取其他事务还没提交或回滚的数据[/b]】
READ COMMITTED:在一个事务中只允许已经commit的记录可见。如果session中select还在查询中,另一session此时insert一条记录,当前事务可以看到修改的记录,从而产生不可重复读取和幻像数据。【[b]只读取其他事务已经提交或回滚的数据[/b]】
REPEATABLE READ:在一个事务开始后,其他session对数据库的修改在本事务中不可见,直到本事务commit或rollback。在一个事务中重复select的结果一样,除非本事务中update数据库。 【[b]不修改其他事务没提交或回滚的数据[/b]】
SERIALIZABLE:最高级别的隔离,只允许事务串行执行。为了达到此目的,数据库会锁住每行已经读取的记录,其他session不能修改数据直到前一事务结束,事务commit或取消时才释放锁。 【[b]事务串行执行[/b]】

主流数据库的一般的默认是READ COMMITTED级别。

MYSQL和MS SQLServer遵守了这个定义而oracle没有。oracle只有三种事务隔离等级:

Read committed
Serializable
Read-only Read-only transactions see only those changes that were committed at the time the transaction began and do not allow INSERT, UPDATE, and DELETE statements


前两个Read committed,Serializable 和ANSI的定义是一致的,来看看最关键的第三个Read-only 。[b]Read-only事务只会看到在这个事务开启时间点其他事务提交过的数据,并且不允许执行INSERT, UPDATE,DELETE语句,换句话说,在设置set transaction read only后,当前会话所见的数据图像,将不再受到其他会话事务的影响。[/b]
所以oracle支持的只读事务不是为了优化性能,而是为了让这个事务中所有的查询操作看到的数据是一个时间点(开启事务)上的一致数据。MYSQL,SQL_SERVER根本没有只读事务的概念,但是有REPEATABLE READ,具体看之间的差别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值