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

时间:2015-08-11 16:07:52

标签: sql database oracle oracle11g ddl

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

$return = $this->client->ImportPlannedVisit(array(
    'UniquePlannedVisitID' => $id,
    'Date1' => $datedos,
    'StartTime' => $timein,
    'EndTime' => $timeout,
    'AlarmTime' => $alarm_time,
    'UniqueClientID' => $ptid,
    'UniqueCarerID' => $agent1,
    'ChargeCode' => "$hcpcs|$mod1-$mod2-$mod3-$mod4|$pricegroup|$pricecode|$dadscontract",
    'contractreference' => $contractreference
));

如果表中包含数据且ALTER TABLE Persons ADD UNIQUE (P_Id) 中的某些数据不唯一,会发生什么?

1 个答案:

答案 0 :(得分:3)

如果您尝试在没有唯一值的列上添加唯一键,则会出现ORA:错误。但是,您可以通过以下两种方式克服这一点。

方式1:

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

方式2:

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关键字

启用它