在现有MySQL表中添加具有唯一键索引的新字段

时间:2014-07-09 12:32:22

标签: mysql

我正在尝试在包含多行数据的现有MySQL表中添加具有唯一键的列(因此它不会有重复记录)。

ALTER TABLE  `common`.`fraud_payment_log`
  ADD  `retainer_id` VARCHAR( 20 ) NOT NULL,
  ADD  `http_referrer` VARCHAR( 255 ) NULL ,
  ADD UNIQUE (`retainer_id`);

但它低于错误:

ERROR 1062 (23000): Duplicate entry '' for key 'retainer_id'

错误是因为当我们在现有表中添加带有记录的新列时会出现重复的空值。

有人可以建议如何实现这个目标吗?

5 个答案:

答案 0 :(得分:2)

您不能将唯一的非NULL列添加到具有多行的表中。根据定义,两行将获得相同的值。

首先添加列,允许NULL值:

ALTER TABLE  `common`.`fraud_payment_log`
    ADD  `retainer_id` VARCHAR( 20 ) NULL,
    ADD  `http_referrer` VARCHAR( 255 ) NULL;

现在,填充列以使其具有不同的值。说:

update `common`.`fraud_payment_log` cross join
       (select @rn := 0) vars
     set retainer_id = (@rn := @rn + 1);

然后添加唯一约束。我通常直接使用索引执行此操作:

create unique index idx_fpl_retainer on  `common`.`fraud_payment_log`(retainer_id);

如果表为空,则只需使用所需的所有列重新创建表。

答案 1 :(得分:0)

请按照以下步骤操作:

  • 添加不唯一的新字段
  • 更新表格并在该字段中添加唯一值
  • 更改表格以使此字段为唯一

答案 2 :(得分:0)

首先应添加列,然后使用唯一值填充该列,然后添加UNIQUE约束。

答案 3 :(得分:0)

您应指定DEFAULT NULL; NULL不计入UNIQUE检查,因此您的表将首先填充NULL值,然后您将继续填写它。

答案 4 :(得分:0)

  1. 使用 UI 或查询创建新列(我的新列是 sensorID
  2. 触发这个:
<块引用>

更新客户端设置sensorID=id

  1. 在上面的查询中,client 是我的表,sensorID 是我新添加的列,我想应用唯一的列,id 是我的主列现有表中的键类型列。