Проблемы с добавлением нового идентификатора (автоинкремент) после существования таблицы - PullRequest
16 голосов
/ 28 января 2011

У меня есть таблица с 38.000 записей, но без столбца с автоинкрементом, например ID.
Теперь я должен добавить столбец ID, и мне интересно, могут ли быть проблемы?

Ответы [ 7 ]

34 голосов
/ 28 января 2011

Вы можете добавить сделать это без проблем только , если ваша таблица не имеет отношения с другими .

Вы должны удалить старый первичный ключ и загрузить таблицу соответствующим образом (возможно, добавьтеуникальный индекс для старого первичного ключа).

Действуйте так:

  • Создайте дамп своей базы данных

  • Удалитьвот такой первичный ключ

ALTER TABLE XXX DROP PRIMARY KEY
  • Добавьте новый столбец вот так
ALTER TABLE XXX add column Id INT NOT NULL AUTO_INCREMENT FIRST, ADD primary KEY Id(Id)

Будет просмотрена таблица и обновлен AutoInc.

21 голосов
/ 17 ноября 2012

Это добавит идентификатор автоматического увеличения в вашу таблицу MySQL:

ALTER TABLE  `your_table_name` ADD  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

В зависимости от количества данных в вашей таблице это может занять несколько минут.

7 голосов
/ 20 февраля 2012

Это решение, которое я попробовал с MySQL Workbench:

ALTER TABLE `tableName` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT  ;

Я не знаю, правильно ли это, но я не заметил никаких проблем в моем приложении Java EE.

1 голос
/ 29 ноября 2015

Я работаю с очень большими данными, и столбец идентификатора заполнен значениями NULL.Я решил запустить следующий SQL, чтобы заполнить числами ... затем я установил столбец id в качестве моего первичного ключа.

set @row = 0;
UPDATE philadelphia.msg_geo_sal SET id = @row := @row + 1;
0 голосов
/ 26 января 2015

Вам может понадобиться сначала добавить его в качестве первичного ключа, прежде чем вы сможете использовать его в качестве поля автоматического увеличения

Вы можете посмотреть на этот пример

ALTER TABLE `category`
ADD PRIMARY KEY (`cat_id`);
ALTER TABLE `category`
MODIFY `cat_id` int(11) NOT NULL AUTO_INCREMENT;
0 голосов
/ 28 января 2011

"Могут ли быть проблемы?"

Могут быть проблемы при вставке записи.Однако ...

Как правило, добавление нового поля обычно довольно безопасно, независимо от того, является ли это автоинкрементным столбцом или нет.Это изменение или удаление столбцов, которые, скорее всего, вызовут у вас проблемы, если вы не уверены во всех зависимостях.

Однако, чтобы быть в безопасности, я сначала попробую его на копии (тестовой) версиии сначала запустите ваши приложения для тестовой версии, просто чтобы быть в безопасности.Во всяком случае, хорошей практикой является использование тестовой среды.

Можете ли вы более конкретно рассказать о том, какие проблемы вас беспокоят?

0 голосов
/ 28 января 2011

Ваша проблема с изменением определения любого поля - это изменение "разрушительное".Такие изменения лучше всего рассматривать как миграцию данных.Я не делал этого с MySQL, но пришлось добавить автоматическую нумерацию в SQL Server.Основная идея та же.

Проверьте документацию, поскольку MySQL может иметь механизм для добавления автоинкремента без сброса поля.Если это так, то выполнение этого через SQL решит проблему.В общем, я рекомендую не делать такие изменения визуально с помощью инструмента, так как большинство инструментов очень разрушительны в своей методологии.

...