oracle之事务隔离级别
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,本文小节了oracle中事务隔离级别。ANSI SQL标准定义了4中隔离级别:READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE隔离级别
千家信息网最后更新 2024年11月11日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安全错误
数据库的锁怎样保障安全
数据库搭建技术架构
沈阳苹果手机软件开发公司有哪些
首都共享网络安全日
汽车网络技术的优点
服务器密钥安全性
许昌软件开发商
网络技术中接口的概念
vb历遍数据库
蛙泳视频软件开发
如何测服务器网速
注意防范网络安全隐患
无法登陆阿尔登法环服务器
网络安全规划及其意义
winsock 服务器
智能软件开发需求
火源服务器
三门峡仓库管理软件开发
python交互读取数据库
卫健局网络安全问题
康为网络技术有限公司医院案例
美国网络安全保险密度
北京工业软件开发哪家好
哈尔滨软件开发学校
中卫网络技术怎么样
运渣车监管管理服务器
ftp服务器账号在哪里
数据库学生考勤记录查询
网络安全语速
火源服务器
网易mc2b2t服务器id