在 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 关键字启用它
是否可以在现有 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 关键字启用它