0
現在我有一些列和大量數據的表:插入索引列有大量數據
表1
Column1 Column2 Column3
data1(string) data2 data3
目前,主鍵是類型與串COLUMN1 。我需要添加一個新的Column0與seriel interger,一個真正的索引。我該如何使用mysql索引來做到這一點?
現在我有一些列和大量數據的表:插入索引列有大量數據
表1
Column1 Column2 Column3
data1(string) data2 data3
目前,主鍵是類型與串COLUMN1 。我需要添加一個新的Column0與seriel interger,一個真正的索引。我該如何使用mysql索引來做到這一點?
首先,你必須引入新的列:
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;
類似這樣的東西
//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;
第二條語句是否會更新table1的所有行? – ulima69
@ ulima69,所有行,沒有'where'子句,因此它不會跳過任何內容。 'order by'子句將確保這些行按照初始索引所在的順序進行編號。 – Johan