文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

oracle之事务隔离级别

2024-04-02 19:55

关注
本文小节了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;




阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯