我正在尝试在包含多行数据的现有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'
错误是因为当我们在现有表中添加带有记录的新列时会出现重复的空值。
有人可以建议如何实现这个目标吗?
答案 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)
更新客户端设置sensorID=id