2011-10-01 66 views
0

現在我有一些列和大量數據的表:插入索引列有大量數據

表1

Column1  Column2 Column3 
data1(string) data2 data3 

目前,主鍵是類型與串COLUMN1 。我需要添加一個新的Column0與seriel interger,一個真正的索引。我該如何使用mysql索引來做到這一點?

回答

0

首先,你必須引入新的列:

ALTER TABLE Table1 ADD COLUMN Column0 INTEGER(10) 

插入你希望他們以任何方式新列的ID;可以通過腳本來完成。

如果這樣做,重新定義PK:

ALTER TABLE Table1 DROP PRIMARY KEY; 

插入自動遞增:

ALTER TABLE Table1 change column Column0 PRIMARY KEY AUTO_INCREMENT; 

確保您的AUTO_INCREMENT值是你的最後一個id是值:

ALTER TABLE Table1 AUTO_INCREMENT = value_of_max_id+1_you_have; 
0

類似這樣的東西

//First add a extra column. 
ALTER TABLE table1 
ADD COLUMN column0 INTEGER NOT NULL; 

//Fill the column with incrementing integers in the same order as the old index. 
UPDATE table1 SET column0 = @rank:= @rank + 1 
CROSS JOIN (SELECT @rank:= 0) init_rank 
ORDER BY column1 ASC; 

//Remove the old primary key. 
ALTER TABLE table1 DROP PRIMARY KEY; 

//Set column0 as the new PK. 
ALTER TABLE table1 CHANGE COLUMN column0 PRIMARY KEY AUTO_INCREMENT; 
+0

第二條語句是否會更新table1的所有行? – ulima69

+0

@ ulima69,所有行,沒有'where'子句,因此它不會跳過任何內容。 'order by'子句將確保這些行按照初始索引所在的順序進行編號。 – Johan