一、问题描述
以 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;
文章评论