Oracle 数据库表中已有重复数据如何添加唯一键(唯一约束)

一、问题描述

以 demo 举例,模拟真实场景。

表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引

ID CODE
1 code1
2 code2
3 code2
4 code2
5 code3

通过以上表中数据可以看出 code 是有重复数据的,此时如果我们直接添加唯一键,会报错。

通过 SQL 语句添加(ENABLE NOVALIDATE 的作用是约束新增数据但不会验证已有数据):

ALTER TABLE TEST_TABLE ADD CONSTRAINT UK_TEST_TABLE_CODE UNIQUE(CODE) ENABLE NOVALIDATE;

即使用到了 ENABLE NOVALIDATE 也报错,如下:

ORA-02299: cannot validate(TESTUSER.TEST_TABLE.UK_TEST_TABLE_CODE)-duplicate keys found
--Create/Recreate primary, unique and foreign key constraints alter table TEST_TABLE and constraint UK_TEST_TABLE_CODE unique(CODE) novalidate

二、解决方案

1、先添加普通索引

CREATE INDEX IDX_TEST_TABLE_CODE ON TEST_TABLE(CODE);

2、再添加唯一键

ALTER TABLE TEST_TABLE ADD CONSTRAINT UK_TEST_TABLE_CODE UNIQUE(CODE) ENABLE NOVALIDATE;

你可能感兴趣的:(Oracle数据库,数据库,oracle,sql)