oracle – 不可重复读和幻读之间有什么区别?
不可重复读和幻读之间有什么区别?
我已经阅读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运行同一个查询两次。
您需要什么隔离级别取决于您的应用程序。 “更好”的隔离级别(例如降低的并发性)具有高成本。 在您的示例中,您不会有幻像读取,因为您只选择单个行(通过主键标识)。你可以有不可重复的读取,所以如果这是一个问题,你可能想要有一个隔离级别,以防止。在Oracle中,事务A也可以发出SELECT FOR UPDATE,然后事务B不能更改行,直到A完成。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |