Oracle事务的隔离级别有2总, Read Commitment, Serializable, Read Only (另外还有2种事务隔离级别,Read Uncommitted, Repatable Read,Oracle没有单独提供.)
Read Only, 看名字就比较简单,在此我们不做讨论,下面主要分析一下Read Commitment, Serializable.
一句话描述:
Read Commitment: 读取在语句开始时已经提交的, 修改冲突通过写一致性来解决数据的一致性.
Serializable: 读取在事务开始时已经提交的. 修改冲突确保先提交的成功,后修改的回滚.
比较细节
不同点
|
读一致性 |
写冲突 |
Read Commitment |
如果事务进行过程中,有数据在别的事务里面提交了,可以立即被当前事务读取到. |
先修改的可以正常提交,后修改的必须等到先修改提交之后.然后通过写一致性来重启事务 |
Serializable: |
事务开始后,其他事务的所有修改对当前事务没有任何影响 |
后修改数据的事务同样会被阻塞,但是当阻塞解除提交时会出现ORA-08177异常. (ORA-08177: can't serialize access for this transaction) |
相同点
|
读一致性 |
写冲突 |
Read Commitment |
只有提交后的数据才会被读取,都不会读取脏数据. |
后修改数据的事务都会被阻塞,无法提交. |
Serializable: |
实验过程
下面的2个实验,比较了Oracle所支持的事务隔离模式, 在读取和修改数据时的详细区别. 如何切换数据库的隔离模式,可以参考下面的语句.
ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;
ALTER SESSION SET ISOLATION_LEVEL = serializable;
下面的2个实验,在开始前需要使用上面的初始化脚本Reset数据.
DROP TABLE XXRPTH.TEST;
CREATE TABLE XXRPTH.TEST
(
NAME VARCHAR(10),
VALUE NUMBER(22)
);
insert into test values('lilao_1', 1);
insert into test values('lilao_2', 2);
insert into test values('lilao_3', 3);
commit;
关键比较点,已经标红高亮
时间 |
事务1 |
事务2 |
Read Commitment |
Serializable: |
t1 |
savepoint aaa; |
|
显示开启事务1 |
|
t2 |
|
savepoint bbb; |
|
显示开启事务2 |
t3 |
|
update test set value=value+10 ; |
|
|
t4 |
select count(*) from test where value>10; |
|
结果是0(读可提交) |
结果是0 |
t5 |
|
commit; |
|
|
t6 |
select count(*) from test where value>10; |
|
结果是3(幻象读,和t4时间读取的记录条数不一样了) |
结果是0 |
t7 |
commit; |
|
|
|
t8 |
select * from test; |
|
NAME VALUE ---------- ---------- lilao_1 11 lilao_2 12 lilao_3 13 |
NAME VALUE ---------- ---------- lilao_1 11 lilao_2 12 lilao_3 13 |
时间 |
事务1 |
事务2 |
Read Commitment |
Serializable: |
t1 |
savepoint aaa; |
|
显示开启事务1 |
|
t2 |
|
savepoint bbb; |
|
显示开启事务2 |
t3 |
|
update test set value=value+10 ; |
|
|
t4 |
select count(*) from test where value>10; |
|
结果是0(读可提交) |
结果是0 |
t5 |
update test set value=value+100; |
|
|
|
t6 |
|
commit; |
|
事务2提交时,事务1会抛出异常 ORA-08177: can't serialize access for this transaction
|
t7 |
select * from test; |
|
NAME VALUE ---------- ---------- lilao_1 111 lilao_2 112 lilao_3 113 |
NAME VALUE ---------- ---------- lilao_1 1 lilao_2 2 lilao_3 3 |
t8 |
commit; |
|
|
虽然事务1在T6时,抛出异常,但是事务并未终止. 所以T7时间没有查询到事务2的修改
|
t9 |
select * from test; |
|
NAME VALUE ---------- ---------- lilao_1 111 lilao_2 112 lilao_3 113 |
NAME VALUE ---------- ---------- lilao_1 11 lilao_2 12 lilao_3 13 |
分享到:
相关推荐
白话中台战略-中台到底长啥样 (2).pdf白话中台战略-中台到底长啥样 (2).pdf白话中台战略-中台到底长啥样 (2).pdf白话中台战略-中台到底长啥样 (2).pdf白话中台战略-中台到底长啥样 (2).pdf白话中台战略-中台到底长啥...
白话c++.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
在第一版的基础上新加了对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法的总结篇,方便大家复习,合适作为笔试面试前的复习资料。
白话中台战略-中台是个什么鬼 (2).pdf白话中台战略-中台是个什么鬼 (2).pdf白话中台战略-中台是个什么鬼 (2).pdf白话中台战略-中台是个什么鬼 (2).pdf白话中台战略-中台是个什么鬼 (2).pdf白话中台战略-中台是个什么...
白话中台战略-中台到底长啥样 (2).docx白话中台战略-中台到底长啥样 (2).docx白话中台战略-中台到底长啥样 (2).docx白话中台战略-中台到底长啥样 (2).docx白话中台战略-中台到底长啥样 (2).docx白话中台战略-中台...
06 白话容器基础(二):隔离与限制.pdf
白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-中台是个什么鬼.pdf白话中台战略-...
白话机器学习的数学-立石贤吾-源代码.zip
白话windows编程.rar
白话机器学习的数学.docx
白话C++编程.rar
本科毕业设计+基于C#实现的医学图像处理系统+使用Oracle 做后台数据库 本科毕业设计+基于C#实现的医学图像处理系统+使用Oracle 做后台数据库 本科毕业设计+基于C#实现的医学图像处理系统+使用Oracle 做后台数据库 ...
《白话 Windows 编程》EXE格式电子书,收藏版!!!
《罗织经》白话全译.doc
白话C#之第一话 白话C#之第一话 初学C的看看吧
基于阿里云ECS环境及CentOS-linux 7.6系统环境下,安装部署Oracle 19C RAC双节点集群,每一步都很详细的说明了配置的方法和原因,白话文表述,小白也能轻松按照文档部署完成;
白话文运动的危机,CAJViewer 文件,使用CAJViewer软件查看
白话 C++ 第二学堂 适合入门级C++的学习,比较全的C++细节知识
白话C++ 轻松学会C++