使用记录在现有表上的表列上创建唯一约束

154*_*12s -1 sql database oracle ddl oracle11g

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

ALTER TABLE Persons ADD UNIQUE (P_Id)
Run Code Online (Sandbox Code Playgroud)

如果表中有数据并且其中的某些数据P_Id不是唯一的,会发生什么情况?

小智 6

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

方式一:

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME UNIQUE (FIELD_NAME) DEFERRABLE NOVALIDATE;
Run Code Online (Sandbox Code Playgroud)

方式2:

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

ALTER TABLE TABLE_NAME ENABLE NOVALIDATE CONSTRAINT CONSTRAINT_NAME;
Run Code Online (Sandbox Code Playgroud)

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