关于非重复读和幻像的区别,请大家讨论

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
看到ITPUB杂志第三期对隔离级别的介绍,疑惑非重复读和幻像有为什么要区分?
·非重复读(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。(A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data. )
·幻像(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。(A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition. )
表面上看,区别就在于非重复读能看见其他事务提交的修改和删除,而幻像能看见其他事务提交的插入。但是修改删除插入应该算一类吧。我想SQL92把他们分开肯定是有深层次原因的,可原因是什么呢?请大家各抒己见。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
修改和删除都是针对已经存在的数据,而插入的是新数据。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
帮忙顶,我也不是太理解
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 fromeast 发布
[B]修改和删除都是针对已经存在的数据,而插入的是新数据。 [/B]

同意。非重复读,说的是同一条数据发生变化
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
关注
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我也有这个疑问,为什么要分开呢?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
非重复读( nonrepeatable read ):事务多次读取同一行中的数据却得到不同数值时。例如:事务1读取了一行数据,而事务2改变或删除了那些行并提交了修改。如果事务1再次读取了那一行,那么,事务1就得到了不同的数值(被更新或删除)。
幻像读( phantom read ):一行数据满足搜索规则,却在开始没有被看到。例如:事务1读取了一系列满足搜索规则的行,而事务2插入或删除了一个满足事务1搜索规则的行。如果事务1再次执行查询语句,就会得到不同的一系列行。
从已经存在和不存在能解释么..
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
非重复读和幻像主要用修改,插入来区分的,不明白为何这样子来区分
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我只记得sql server里有这2个概念,oracle里都没看到有这2个概念的
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
感觉就没什么区别的,都是同一事务中多次查询结果不一样
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行