在Oracle中具有重复行的表上创建唯一索引

时间:2020-03-26 20:35:00

标签: sql oracle oracle11g database-indexes

我有一个表,该表在6个不同的列上都有UNIQUE INDEX。但是,表中有重复项。当我删除索引并尝试重新创建它时,它会抛出错误,指出存在重复的值。

有没有一种方法可以使重复的行仍然创建唯一索引?

我看到约束有NOVALIDATE选项。索引有类似的东西吗?

我想应该有一种方法,因为表中有重复的行具有有效的UNIQUE INDEX。

请协助。

2 个答案:

答案 0 :(得分:2)

即使将索引标记为UNUSABLE,也可以在表上创建UNIQUE索引,即使它具有重复项也是如此。这意味着该索引将存在,但系统无法使用它。为此,请使用类似于

的命令
CREATE UNIQUE INDEX UNUSABLE_UNIQUE_IDX_SUCCEEDS
  ON TABLE_WITH_DUPS(ID)
  UNUSABLE

db<>fiddle here

CREATE INDEX docs here

答案 1 :(得分:0)

好像您不想在多次插入操作期间发生错误ORA-00001 Unique constraint violated错误,甚至发生违反的情况是,除非,插入的数据已提交。然后,您可以创建唯一键deferrable initially deferred,例如

alter table tab
  drop constraint Ukey [cascade]; 

alter table tab
  add constraint Ukey unique ( col1, col2, ..., col6 )
  deferrable initially deferred

以上cascade选项与删除唯一键有关,即使表选项卡的子表中存在外键也是如此。