各位有没有碰上过有主键,但是数据仍有重复的情况?

kingstarer 2012-08-11 10:06:31
我碰上了这种情况,不知道怎么处理.

情况是这样的:表里面有几个字段,A,B, C, D等

其中A字段是number类型,并且是表的主键字段

当查询时,使用select * from 表 where C = '指定值' 查出来结果,发现有几条记录。

奇怪的是,每条记录字段A值都是一样的。(这些记录的B和C字段值则不同)

但更奇怪的是,取查询出来的一条记录的A字段值,执行另一个查询,select * from 表 where A = '查询出来的值'

结果只返回一条记录(查出来的记录,B,C,D的值都跟之前查出来的不同)

查看执行计划,第一条sql走的是普通索引扫描(C上面建了一个普通索引)
第二条sql走的是唯一索引扫描(A上面建了主键)

查all_indexes的索引状态status两个索引都是valid的
================================================================
不知道各位有没有碰上类似这样的问题,表有主键,但是数据有重复。 用两个逻辑等价的sql查询返回结果不同。

是什么原因造成的? 要怎么验证? 怎么解决? 怎么避免?
...全文
208 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingstarer 2012-08-11
  • 打赏
  • 举报
回复
得了一个教训,下次再有客户报障,要用sqlplus确认一次,因为客户程序有可能有bug
kingstarer 2012-08-11
  • 打赏
  • 举报
回复
问题解决了,是客户程序取数结果显示错误导致的。

该程序在查询返回的number值较大时,会将结尾全显示成0。。。

谢谢各位热心回答
kingstarer 2012-08-11
  • 打赏
  • 举报
回复
谢谢ls回复,我连上环境查查看

想问一下,这种启动不合法的状态会是什么情况造成的?

会对sql执行计划,执行结果有影响吗
huangdh12 2012-08-11
  • 打赏
  • 举报
回复
all_constraints 里面有两个字段 一个是 status 一个是 validated

你看看这个是否是正常。
有一种叫做关系 启用 ,但不合法
huangdh12 2012-08-11
  • 打赏
  • 举报
回复
我也觉得不太可能, 主键失效了?
人生无悔 2012-08-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
奇怪的是,每条记录字段A值都是一样的。
[/Quote]
我相信主键列,不会相同的

看下,应是没记录的,如果有记录说明A不是主键或单一主键
select A,count(1) from 表
group by A
having count(1)>1;

17,377

社区成员

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

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