#mysql #sql #database #indexing #auto-increment
#mysql #sql #База данных #индексирование #автоматическое увеличение
Вопрос:
У меня есть таблица с 20 000 строками данных, которые я импортировал, но я забыл поместить в нее первичный ключ, чтобы каждая строка имела уникальный ключ.
Я хочу, чтобы первая строка начиналась с идентификатора 1 и увеличивалась до последней строки и заканчивалась идентификатором 20000. Как мне обновить все строки одним запросом?
Я использую MySQL. Пробовал использовать phpMyAdmin, но он этого не сделал.
Ответ №1:
После добавления нового столбца ID (пока не устанавливайте в качестве первичного ключа и не включайте автоматическое увеличение) запустите:
SET @index = 1;
UPDATE tablename SET ID = (@index:=@index 1);
Это устанавливает увеличивающееся значение идентификатора, начиная с 1, для каждой из ваших существующих строк, таким образом решая проблему с дублированием ключа, с которой вы столкнулись бы, если бы попытались вставить новый столбец первичного ключа после того, как данные уже были введены.
Как только это будет сделано, вы можете установить столбец ID в качестве первичного ключа с автоматическим увеличением.
Комментарии:
1. Ого. Мне это нужно сейчас для Oracle. Там тоже есть какие-нибудь подсказки?
Ответ №2:
Измените tablename
и запустите следующую инструкцию SQL. Он создаст новый первичный ключ с именем id и заполнит его, начиная с первой строки, равной 1.
ALTER TABLE `tablename` ADD COLUMN id INT(10) AUTO_INCREMENT NOT NULL FIRST, ADD PRIMARY KEY (id);