转自:http://www.dataguru.cn/thread-286082-1-1.html
用示例比较Oracle的 Read committed 和Serializable 事务隔离等级的区别,给出SQL演示过程。
Read committed读已提交事务隔离等级:Oracle 默认隔离等级,支持不可重复读和幻读。
Serializable 事务隔离等级:只能看到事务开始时所有提交的改变和自身的改变,不支持不可重复读和幻读,事务开始是什么样子,结果就是什么样子,其他用户影响不了这个事务。
会话A
LEO1@LEO1>create table leo9(xint,yint); 创建表
Table created.
LEO1@LEO1>insert intoleo9values(100,100); 插入一行
1 row created.
LEO1@LEO1>commit; 提交
Commit complete.
LEO1@LEO1>set transactionisolationlevel serializable; 启动Serializable 事务隔离等级
Transaction set.
LEO1@LEO1>select * from leo9;
X Y
---------- ---------------------------
100 100
会话B,我们用另一个会话不管怎么修改leo9表,都不会影响会话A事务
LEO1@LEO1>insert intoleo9values(200,200);
1 row created.
LEO1@LEO1>commit;
Commit complete.
LEO1@LEO1>insert intoleo9values(300,300);
1 row created.
LEO1@LEO1>commit;
Commit complete.
会话A,还是一条数据
LEO1@LEO1>select * from leo9;
X Y
---------- ---------------------------
100 100
会话A自己修改的内容在事务中是生效的
LEO1@LEO1>insert intoleo9values(400,400); 我们插入一条记录
1 row created.
LEO1@LEO1>select * fromleo9; 在本事务中是可以看到的
X Y
---------- ----------
400 400
100 100
LEO1@LEO1>commit; 一旦事务结束,Serializable 事务隔离等级就会失效
Commit complete.
会话A,又可以看到所有的记录了
LEO1@LEO1>select * from leo9;
X Y
---------- ----------
400 400
100 100
200 200
300 300
两种事务隔离等级的比较
Read committed V.S Serializable Transactions
支持SQL92标准 支持SQL92标准
读取物化视图 维护语句级一致性 维护事务级一致性
事务一致性 支持语句级 支持事务级
行级锁 支持 支持
读锁定写 不支持 不支持
写锁定读 不支持 不支持
非行级锁 不支持 不支持
行级锁 支持 支持
事务锁等待 支持 支持