12
返回列表 发新帖
楼主: qingyun

正在执行查询时候,数据发生变化会出现什么情况

[复制链接]
论坛徽章:
10
授权会员
日期:2008-03-13 10:32:44生肖徽章2007版:鸡
日期:2008-04-03 18:55:51数据库板块每日发贴之星
日期:2008-04-21 01:01:58奥运会纪念徽章:拳击
日期:2008-06-14 10:29:372014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
11#
发表于 2008-3-19 08:14 | 只看该作者
都是0。

读一致性分为:语句一致性、事务一致性
语句一致性:只读取语句开始时已提交的数据;
事务一致性:只读取事务开始时已提交的数据;

无论此后数据如何改变、提交,均可以通过查询undo tablespace获得前像值。当要读取的前像值被覆盖时,就会提示01555错误(snapshoot too old,快照太旧)。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
12#
发表于 2008-3-19 10:06 | 只看该作者
原帖由 qingyun 于 2008-3-18 22:16 发表
比如某个表,其名字为table1 ,数据较多,比如有10万条;其中有个字段field1 ,所有记录值都是为'0';

当A会话 执行 select  * from table1 时;
B会话 正在执行 update  table1 set field1 ='1' where field1='0';

两个会话可能都比较消耗时间;

假如B会话提前结束;那么A会话查询的结果
1.field1 所有记录都为'0';
  2.field1 部分记录为'0',部分记录为'1';
  3.field1 所有记录都为'1';

我个人认为 是第一种答案,不过不能确定;


还有假如A会话是个游标
declare  
cursor c_1 is  select  * from table1
begin
  open   c_1;
  loop
      FETCH c_1
      INTO ...;
    if c_1%NOTFOUND then   
     
          close c_1;
          exit;
   end if;
      
  end loop;
end ;


那么 fetch 所有记录后,是不是field1的值也会部分为0,部分为1? 我觉得应该和上面一样,也是都为0;

以上结论是我的猜测,不知道真是答案是否有出入?


据说sqlserver 在处理这些情况时的机制和oracle 不一样。
当A会话在读时,也就是 select  * from table1  ,相当于做 select  * from table1  for update 锁住表了;

这时候B会话的 update  table1 set field1 ='1' where field1='0'; 会等待A会话做完了才做;
而且有时候B会话等不急就直接不做退出了!
总之,sqlserver在并发处理时很有问题 ,容易产生瓶颈。这个是我同事测试发现的。
我做项目基本没用过sqlserver,如果这样,我就不敢用sqlserver了。

http://topic.csdn.net/u/20080318 ... 6-dee6b5f57c27.html


一致性读。不会发生任何事情,直到读完成。undo 表空间的一个功能。

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表