Вставить столбец индекса в таблицу с большими данными

#mysql #database

#mysql #База данных

Вопрос:

теперь у меня есть таблица с несколькими столбцами и большим объемом данных:

Таблица1

 Column1        Column2  Column3
data1(string)  data2    data3
  

На данный момент первичным ключом является column1, набранный с помощью string . Мне нужно добавить новый столбец Column0 с seriel interger, на самом деле индекс. Как я могу это сделать, используя индекс mysql?

Ответ №1:

Что-то вроде этого

 //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;
  

Комментарии:

1. @ulima69, да, все строки, where предложения нет, поэтому он ничего не пропустит. order by Предложение гарантирует, что строки пронумерованы в том же порядке, в котором был начальный индекс.

Ответ №2:

Сначала вы должны ввести новый столбец:

 ALTER TABLE Table1 ADD COLUMN Column0 INTEGER(10)
  

Вставьте идентификатор в новый столбец любым удобным для вас способом; это может быть сделано, например, с помощью скрипта.

ЕСЛИ это будет сделано, переопределите PK:

 ALTER TABLE Table1 DROP PRIMARY KEY;
  

Вставьте автоинкремент:

 ALTER TABLE Table1 change column Column0 PRIMARY KEY AUTO_INCREMENT;
  

Убедитесь, что ваше значение auto_increment соответствует значению вашего последнего идентификатора:

 ALTER TABLE Table1 AUTO_INCREMENT = value_of_max_id 1_you_have;