在 Existing Table with records 的 table 列上创建唯一约束

create a unique constraint on table column on Existing Table with records

是否可以在现有 Table 记录的 table 列上创建唯一约束?

ALTER TABLE Persons ADD UNIQUE (P_Id)

如果 table 有数据,而 P_Id 中的某些数据不唯一,会发生什么情况?

如果您尝试在没有唯一值的列上添加唯一键,您将收到 ORA: 错误。但是,您可以通过以下两种方式克服这个问题。

方式一:

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME UNIQUE (FIELD_NAME) DEFERRABLE NOVALIDATE;

方式二:

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRIANT_NAME UNIQUE (FIELD_NAME) DISABLE;

ALTER TABLE TABLE_NAME ENABLE NOVALIDATE CONSTRAINT CONSTRAINT_NAME;

在第一种方式中,我们明确提到 Oracle 在创建 UNIQUE 键时不验证现有数据,在第二种方式中,我们最初将 UNIQUE 键标记为禁用(如果我们标记,它将不会验证数据它禁用)然后使用 NOVALIDATE 关键字启用它