2012-01-04 38 views
1

创建新的独特的领域,我需要在数据库表中创建一个字段,已填充数据。当然,只是增加空白字段是不可能的。我只能想到一个新的结构,创建新表和现有数据复制到新表,但我不知道是否有正更简单的方法。MySQL的:在已填充表

提示:它是一个组合键,在同一个表中所包括的其他3个字段的。

编辑:该字段包含一个varchar值 编辑:因为你们有些人问,不可能通过使用ADD UNIQUE在填充表中创建一个新的UNIQUE字段。它在所有条目中复制新的(空或不)值。例如:

ALTER TABLE '表名' ADD '字段名' VARCHAR(64)NOT NULL, ADD UNIQUE( '字段名' )

错误:重复的条目 '' 为键 '字段名'

+0

为什么你不能创建该字段,然后用数据填充它? – Robert 2012-01-04 20:35:29

+0

有没有主键? – 2012-01-04 20:35:44

+0

@Robert,因为它的值(空或不)将被复制通过所有条目。由于它是一个独特的关键,这是不可能的。 – mspir 2012-01-04 20:39:25

回答

3

Of course just adding the field empty is not possible.

为什么?

我会做到以下几点:

  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 ...,如果你需要它是主要的)。
+0

听起来更像它......谢谢:) – mspir 2012-01-04 20:48:28

0

您可以创建一个新的领域与AUTO_INCREMENT选项:

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

Hint: it is a composite key, comprised of 3 other fields in the same table.

这听起来像一个红色的标志给我。你想创建一个新的领域与其他包括3场已经在同一个表中存在的值的唯一约束?

如果你想要做的是执行,这三个字段的组合是唯一的,那么你应该只添加那些3个现有油田(不带重复数据的新字段)的唯一约束。

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

我遇到了同样的问题,我不得不在已填充的表上添加唯一约束。

错误:

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

我怎么解决呢?我把该行的标识加入独特的领域,以避免重复:

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

我再没有任何重复的行了,并能够添加唯一约束。