Как мне обновить таблицу, чтобы добавить первичный ключ и обновить все существующие строки с увеличенными идентификаторами?

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