关于脏数据

happysmhzp 2011-04-13 06:24:20
比如说,有两个用户A,B同时操作数据库,A开始了一个事务,修改了某行,但还未提交,这个时候,B开始另一个事务,读取了该行,然后A回滚了事务,即修改被取消了,那么,B读取到的那一行数据就是脏数据

上面这句话正确吗?如果事物A未提交,事物B能读到A所修改的数据吗?

如何判断A,B 是否属于同一个事物?

在PL/SQL 中先删一条数据(没有提交)紧接着在查刚才那条数据是查不到的,既然没有提交为什么会查不到呢?

希望各位能详细回答一下,小弟不胜感激。
...全文
376 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
c1032176200 2012-10-29
  • 打赏
  • 举报
回复
受教了
VC7777777 2012-08-09
  • 打赏
  • 举报
回复
在A对数据进行写操作的时候,这时候这部分数据在缓冲区有一个备份数据。没有提交的话,是不会改变的,脏数据是提交但是没有保存到磁盘的数据。
minitoy 2011-04-14
  • 打赏
  • 举报
回复
去查下隔离级别和脏读,不可重复读,幻读等现象的关系就明白了.
minitoy 2011-04-14
  • 打赏
  • 举报
回复
这个要看数据库工作在哪个隔离级别.只有在read uncommitted的时候才会出现脏读.
而oracle只支持read committed和read serialization两种,所以不会出现你说的情况.
giant7 2011-04-14
  • 打赏
  • 举报
回复
A没有提交之前,B只能看到行修改之前的数据,这是undo表空间的作用之一:维护数据的一致性.
xiaoyaobihai 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 upc05070000 的回复:]
楼主首先要弄清楚 事务是为了保证数据完整性的
A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据
但是 在A事务中查询的话 查到的都是操作之后的数据
这个很好理解 你开两个sql窗口 在一个里边给一个表insert一条数据 不提交 紧接着select 有数据 但是去另一个sql窗口select 就没有数据
[/Quote]
+1
humanity 2011-04-14
  • 打赏
  • 举报
回复
Oracle 如何设置事务隔离级别去让 B 也看到 A 正在改的那个数据?
BetterMe 2011-04-14
  • 打赏
  • 举报
回复
因为他只是在内存中修改,并没有被持久化
chrisbi 2011-04-14
  • 打赏
  • 举报
回复
没有提交的数据只有自己看得到,并没有update到数据库。
horizonlyhw 2011-04-13
  • 打赏
  • 举报
回复
Q:如果事物A未提交,事物B能读到A所修改的数据吗?
A:当然看不到

Q:如何判断A,B 是否属于同一个事物?
A:这个应该不用判断吧,两次连接 就是属于两个“事物”

Q:在PL/SQL 中先删一条数据(没有提交)紧接着在查刚才那条数据是查不到的,既然没有提交为什么会查不到呢?
A:因为这个是一个“事物”中,例如你在plsql developer中开启另一个窗口,就可以查到了。
chen269015865 2011-04-13
  • 打赏
  • 举报
回复
A没有提交之前,B只能看到行修改之前的数据,这是undo表空间的作用之一:维护数据的一致性.
UPC子夜 2011-04-13
  • 打赏
  • 举报
回复
楼主首先要弄清楚 事务是为了保证数据完整性的
A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据
但是 在A事务中查询的话 查到的都是操作之后的数据
这个很好理解 你开两个sql窗口 在一个里边给一个表insert一条数据 不提交 紧接着select 有数据 但是去另一个sql窗口select 就没有数据
cuisea 2011-04-13
  • 打赏
  • 举报
回复
“A开始了一个事务,修改了某行,但还未提交,这个时候,B开始另一个事务,读取了该行”,因为A没有提交,B读取的是A修改前的数据。没有提交的数据只有自己能查询到,其他用户是查看不到的。
建议你多看看这方面的资料吧

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧