2012-01-04 70 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 = ''; 

我再沒有任何重複的行了,並能夠添加唯一約束。