我需要在已填充数据的数据库表中创建一个字段。当然只是将字段添加为空是不可能的。我只能想到用新结构创建一个新表并将现有数据复制到新表中,但我想知道是否有更简单的方法。
提示:它是一个复合键,由同一个表中的其他3个字段组成。
编辑:该字段包含varchar值 编辑:因为有些人问,只能使用ADD UNIQUE在填充表中创建一个新的UNIQUE字段。它会在所有条目中复制新的(空的或非空的)值。例如:
ALTER TABLE'tablename'ADD'fieldname'VARCHAR(64)NOT NULL, 添加独特( “字段名” )
错误:密钥'fieldname'
的重复条目''答案 0 :(得分:3)
当然只是将字段添加为空。
为什么?
我会做以下事情:
ALTER TABLE t ADD COLUMN new_column *type_definition*
UPDATE t SET new_column=*computation_expression*
ALTER TABLE t ADD INDEX ...
添加索引(或ALTER TABLE t ADD PRIMARY KEY ...
如果您需要将其作为主要索引)。答案 1 :(得分:1)
提示:它是一个复合键,由同一个表中的其他3个字段组成。
这对我来说听起来像是一面红旗。您想创建一个具有唯一约束的新字段,该约束由同一个表中已存在的3个其他字段的值组成吗?
如果您要做的只是强制这三个字段的组合是唯一的,那么您应该只在这3个现有字段上添加唯一约束(而不是具有重复数据的新字段)。
ALTER TABLE tablename ADD UNIQUE (fieldname1, fieldname2, fieldname3);
答案 2 :(得分:0)
您可以使用AUTO_INCREMENT
选项创建新字段:
ALTER TABLE `your_table` ADD COLUMN `new_id` INT NOT NULL AUTO_INCREMENT
答案 3 :(得分:0)
这是一种可行的解决方法:
alter table foo add bar varchar(36) not null default '';
添加触发器
答案 4 :(得分:0)
我遇到了同样的问题,我必须在已经填充的表上添加一个唯一约束。
错误:
Integrity constraint violation: 1062 Duplicate entry '' for key 'url_UNIQUE'
我是如何解决的?我将行的id放入唯一字段以避免重复:
UPDATE content SET new_url = content_id WHERE new_url = '';
然后我再没有任何重复的行了,并且能够添加唯一约束。