同一 table 中不同列的多个唯一约束

Multiple unique constraints on different columns in the same table

我的 Oracle 11g 数据库中有一个至关重要的 table。它有一个 index column 被设置为 primary key。第二列包含必须唯一的字符串。我为那个添加了一个 unique constraint。现在有第三列也应该有唯一约束。

当我使用 ALTER TABLE 语句时出现错误

'ORA-02299: duplicate keys found' error.

我知道可以在多个列上创建唯一约束,但这不是我想要的。我需要列独立唯一:

    ALTER TABLE someTable
    ADD CONSTRAINT constraint1_someTable UNIQUE (column2);
    ALTER TABLE someTable
    ADD CONSTRAINT constraint2_someTable UNIQUE (column3);

我希望此 table 的所有列中的所有条目都是完全唯一的。有没有一种优雅的方法可以实现这一目标?

您的列似乎包含一些重复的键,因此当您尝试应用唯一索引时出现错误。
在设置唯一约束之前检查您没有任何重复值。

您必须找到并消除该列的重复值,然后才能对其添加唯一约束。

您可以使用以下查询来查找重复值

select column3 from someTable group by column3 having count(*) > 1;

如果您无法消除重复值但又想防止出现新的重复项,则可以使用 非唯一 索引通过 NOVALIDATE 选项添加唯一约束.

ALTER TABLE someTable
 ADD CONSTRAINT constraint2_someTable UNIQUE (column3) 
   USING INDEX(CREATE INDEX column3_ix ON someTable (column3)) ENABLE NOVALIDATE;

schurik 的解决方案应该有效。 另一种解决方案是自连接。

select t1.column1, t1.column3, t2.column3
from someTable t1, someTable t2
where t1.column1 = t2.column1
and t1.column3 = t2.column3
and t1.rowid <> t2.rowid