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