加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – 不可重复读和幻读之间有什么区别?

发布时间:2020-12-12 14:41:26 所属栏目:百科 来源:网络整理
导读:不可重复读和幻读之间有什么区别? 我已经阅读Isolation (database systems) article from Wikipedia,但我有一些疑问。在下面的例子中,会发生什么:不可重复读和幻像读? 事务A SELECT ID,USERNAME,accountno,amount FROM USERS WHERE ID=1 输出: 1----MI
不可重复读和幻读之间有什么区别?

我已经阅读Isolation (database systems) article from Wikipedia,但我有一些疑问。在下面的例子中,会发生什么:不可重复读和幻像读?

事务A

SELECT ID,USERNAME,accountno,amount FROM USERS WHERE ID=1

输出:

1----MIKE------29019892---------5000

事务B

UPDATE USERS SET amount=amount+5000 where ID=1 AND accountno=29019892;
COMMIT;

事务A

SELECT ID,amount FROM USERS WHERE ID=1

另一个疑问是,在上面的例子中,应该使用哪个隔离级别?为什么?

From Wikipedia(其中有很棒的和详细的例子):

A non-repeatable read occurs,when during the course of a transaction,a row is retrieved twice and the values within the row differ between reads.

A phantom read occurs when,in the course of a transaction,two identical queries are executed,and the collection of rows returned by the second query is different from the first.

简单示例:

>用户A运行同一个查询两次。
>在其间,用户B运行事务并提交。
>不可重复读:用户A已查询的A行第二次有不同的值。
>幻像读取:查询中的所有行之前和之后都具有相同的值,但正在选择不同的行(因为B已删除或插入一些行)。示例:从表中选择sum(x)将返回不同的结果,即使没有受影响的行本身已更新,如果行已添加或删除。

In the above example,which isolation level to be used?

您需要什么隔离级别取决于您的应用程序。 “更好”的隔离级别(例如降低的并发性)具有高成本。

在您的示例中,您不会有幻像读取,因为您只选择单个行(通过主键标识)。你可以有不可重复的读取,所以如果这是一个问题,你可能想要有一个隔离级别,以防止。在Oracle中,事务A也可以发出SELECT FOR UPDATE,然后事务B不能更改行,直到A完成。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读