MySQL:在已填充的表中创建新的唯一字段



我需要在数据库表中创建一个已经填充了数据的字段。当然,仅仅添加空字段是不可能的。我只能考虑创建一个具有新结构的新表,并将现有数据复制到新表中,但我想知道是否有更简单的方法。

提示:它是一个复合键,由同一表中的其他3个字段组成。

编辑:字段包含varchar值编辑:因为你们中的一些人会问,仅仅使用ADD UNIQUE是不可能在填充的表中创建新的UNIQUE字段的。它会在所有条目中复制新值(无论是否为空)。示例:

ALTER TABLE"tablename"ADD"fieldname"VARCHAR(64)NOT NULL,添加唯一('字段名称')

错误:键"fieldname"的条目"重复

当然,仅仅添加空字段是不可能的。

为什么?

我会做以下事情:

  1. ALTER TABLE t ADD COLUMN new_column *type_definition*创建字段
  2. 更新新建字段,如UPDATE t SET new_column=*computation_expression*
  3. ALTER TABLE t ADD INDEX ...添加索引(如果需要,则按ALTER TABLE t ADD PRIMARY KEY ...添加索引)

提示:它是一个复合键,由同一表中的其他3个字段组成

这听起来像是一个危险信号。你想创建一个具有唯一约束的新字段,该约束由同一表中已经存在的其他3个字段的值组成吗?

如果你只想强制这三个字段的组合是唯一的,那么你只需要在这三个现有字段上添加一个唯一的约束(而不是一个有重复数据的新字段)。

ALTER TABLE tablename ADD UNIQUE (fieldname1, fieldname2, fieldname3);

您可以使用AUTO_INCREMENT选项创建一个新字段:

ALTER TABLE `your_table` ADD COLUMN `new_id` INT NOT NULL AUTO_INCREMENT  

这是一个可能的解决方法:

alter table foo add bar varchar(36) not null default '';

然后根据mysql 中列的GUID的默认值添加一个触发器

我遇到了同样的问题,我必须在已经填充的表上添加一个唯一的约束。

错误:

Integrity constraint violation: 1062 Duplicate entry '' for key 'url_UNIQUE'

我是怎么解决的?我将行的id放入唯一字段以避免重复:

UPDATE content SET new_url = content_id WHERE new_url = '';

然后,我不再有任何重复的行,并且能够添加唯一的约束。

最新更新