oracle之事务隔离级别
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本文小节了oracle中事务隔离级别。ANSI SQL标准定义了4中隔离级别:READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE隔离级别
千家信息网最后更新 2024年09月22日oracle之事务隔离级别本文小节了oracle中事务隔离级别。
ANSI SQL标准定义了4中隔离级别:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
隔离级别允许或不允许的3种现象
Dirty read(脏读):能读到未提交的数据。
Nonrepeatable read(不可重复读):可能会出现丢失更新。
Phantom read(幻像读): 已读的数据不会改变,和以前相比,可能会有更多满足条件的数据。
ANSI隔离级别
隔离级别 脏读 不可重复读 幻像读
READ UNCOMMITTED 允许 允许 允许
READ COMMITTED 不允许 允许 允许
REPEATABLE READ 不允许 不允许 允许
SERIALIZABLE 不允许 不允许 不允许
以下部分测试例子。
1、READ UNCOMMITTED
允许脏读,不可重复读和幻像读。这里想更改隔离级别,直接报错。
SQL> SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
*
ERROR at line 1:
ORA-02179: valid options: ISOLATION LEVEL { SERIALIZABLE | READ COMMITTED }
2、READ COMMITTED
oracle的默认隔离选项。事务只能读取数据库中已经提交的数据。不允许脏读。
session 1:
SQL> conn test/test
Connected.
SQL> SET TRANSACTION
2 ISOLATION LEVEL
3 READ COMMITTED;
Transaction set.
SQL> select * from t;
X
----------
1
session 2:
SQL> conn test/test
Connected.
SQL> SET TRANSACTION
2 ISOLATION LEVEL
3 READ COMMITTED;
Transaction set.
SQL> select * from t;
X
----------
1
session 1:
SQL> update t set x=2;
1 row updated.
SQL> insert into t values (3);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t;
X
----------
2
3
session 2:
SQL> select * from t;
X
----------
2
3
==>验证了允许不可重复读和幻象读。
3、REPEATABLE READ
能给出一正确的结果,避免丢失更新。即不允许脏读和重复读,允许幻读。
4、SERIALIZABLE
最高程度的隔离性。即不允许脏读,不可重复读和幻读。
session 1;
SQL> select * from t;
X
----------
1
session2:
SQL> select * from t;
X
----------
1
SQL> SET TRANSACTION
2 ISOLATION LEVEL SERIALIZABLE;
Transaction set.
SQL> select * from t;
X
----------
1
session1:
SQL> insert into t values (2);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t;
X
----------
1
2
session 2:
SQL> select * from t;
X
----------
1
SQL> update t set x=2;
update t set x=2
*
ERROR at line 1:
ORA-08177: can't serialize access for this transaction
==》自事务后,session1又添加了一行为2记录,session2更改报错。
总结:
1.oracle只允许隔离级别更改为SERIALIZABLE和READ COMMITTED,默认为READ COMMITTED。
2.设置为最高级别的隔离选项(SERIALIZABLE)后,可能会在事务内遇到ORA-08177。
end;
ANSI SQL标准定义了4中隔离级别:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
隔离级别允许或不允许的3种现象
Dirty read(脏读):能读到未提交的数据。
Nonrepeatable read(不可重复读):可能会出现丢失更新。
Phantom read(幻像读): 已读的数据不会改变,和以前相比,可能会有更多满足条件的数据。
ANSI隔离级别
隔离级别 脏读 不可重复读 幻像读
READ UNCOMMITTED 允许 允许 允许
READ COMMITTED 不允许 允许 允许
REPEATABLE READ 不允许 不允许 允许
SERIALIZABLE 不允许 不允许 不允许
以下部分测试例子。
1、READ UNCOMMITTED
允许脏读,不可重复读和幻像读。这里想更改隔离级别,直接报错。
SQL> SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
*
ERROR at line 1:
ORA-02179: valid options: ISOLATION LEVEL { SERIALIZABLE | READ COMMITTED }
2、READ COMMITTED
oracle的默认隔离选项。事务只能读取数据库中已经提交的数据。不允许脏读。
session 1:
SQL> conn test/test
Connected.
SQL> SET TRANSACTION
2 ISOLATION LEVEL
3 READ COMMITTED;
Transaction set.
SQL> select * from t;
X
----------
1
session 2:
SQL> conn test/test
Connected.
SQL> SET TRANSACTION
2 ISOLATION LEVEL
3 READ COMMITTED;
Transaction set.
SQL> select * from t;
X
----------
1
session 1:
SQL> update t set x=2;
1 row updated.
SQL> insert into t values (3);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t;
X
----------
2
3
session 2:
SQL> select * from t;
X
----------
2
3
==>验证了允许不可重复读和幻象读。
3、REPEATABLE READ
能给出一正确的结果,避免丢失更新。即不允许脏读和重复读,允许幻读。
4、SERIALIZABLE
最高程度的隔离性。即不允许脏读,不可重复读和幻读。
session 1;
SQL> select * from t;
X
----------
1
session2:
SQL> select * from t;
X
----------
1
SQL> SET TRANSACTION
2 ISOLATION LEVEL SERIALIZABLE;
Transaction set.
SQL> select * from t;
X
----------
1
session1:
SQL> insert into t values (2);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t;
X
----------
1
2
session 2:
SQL> select * from t;
X
----------
1
SQL> update t set x=2;
update t set x=2
*
ERROR at line 1:
ORA-08177: can't serialize access for this transaction
==》自事务后,session1又添加了一行为2记录,session2更改报错。
总结:
1.oracle只允许隔离级别更改为SERIALIZABLE和READ COMMITTED,默认为READ COMMITTED。
2.设置为最高级别的隔离选项(SERIALIZABLE)后,可能会在事务内遇到ORA-08177。
end;
隔离
级别
数据
事务
幻像
最高
更新
一行
例子
小节
幻象
数据库
更多
最高级
条件
标准
现象
程度
结果
部分
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云网络技术打开
数据库技术与应用实践答案
新建的数据库分离后在哪里
九城网络技术 烟台
关闭数据库的方法没有
软件开发的技术都有哪些
湖北省宝尊网络技术有限公司
宝塔安装oracle数据库
网络技术和计算机软件开发
我的世界免费的服务器地址
上海 网络技术有限公司
TWO 服务器是什么
软件开发需求镀金
华为软件开发云招聘
数据库思维导图第一章到第12章
wps表格筛选会重复数据库
墨斗互动网络技术公司
芜湖计算机软件开发培训班
软件开发合同是保密吗
少女前线所以服务器
曙光服务器怎么换内存条
网络安全维护多项选择
js禁止提交数据库
植物大战僵尸服务器通讯怎么解决
全国网络安全公安会议
东平手机app软件开发费用
品知网络技术有限公司
国泰安数据库免费时间
传奇游戏是什么服务器
金仓数据库端口多少