Переприсвоение айди в таблице mysql

Узнай цену своей работы

Формулировка задачи:

Привет! Есть проблемка в базе данных mysql. Существует таблица, в которой айди = автоинкрименту. Так вот, за несколько лет в таблицу было добавлено очень много материала, более 100 тысяч. И недавно было принято решение почистить ее. Удаляли все ненужные записи. В итоге теперь в базе айди выглядят примерно так: 1 4 267 483 1147 1938 И тд. У последней записи айди = 183 943. Следующие записи, соответственно, будут принимать значения 183 944 и тд. Собственно вопрос, можно ли как-то заново всем присвоить айди начиная с единицы, чтобы вновь в базе шли такие айди: 1 2 3 4 5 и тд? Может есть какой-нибудь запрос, который поможет это реализовать? Заранее благодарю

Решение задачи: «Переприсвоение айди в таблице mysql»

textual
Листинг программы
SET @rn = 0;
UPDATE mytable
JOIN (SELECT id, (@rn:=@rn+1) AS rn FROM mytable ORDER BY id) mytemp ON mytable.id = mytemp.id
SET mytable.id = mytemp.rn;
 
SET @query = CONCAT('ALTER TABLE mytable AUTO_INCREMENT =', @rn, ';');
PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;

Объяснение кода листинга программы

В этом коде:

  1. Создается переменная сессии @rn и инициализируется значением 0.
  2. Производится обновление таблицы mytable с использованием подзапроса, который сначала сортирует таблицу mytable по полю id, а затем присваивает каждой строке уникальный номер rn.
  3. Значение переменной @rn используется в запросе на изменение автоинкремента для таблицы mytable.
  4. Запрос на изменение автоинкремента подготавливается и выполняется.
  5. Подготовленный запрос на изменение автоинкремента освобождается. Список действий:
  6. Создать переменную сессии @rn и инициализировать ее значением 0.
  7. Обновить таблицу mytable с использованием подзапроса, который сначала сортирует таблицу mytable по полю id, а затем присваивает каждой строке уникальный номер rn.
  8. Использовать значение переменной @rn в запросе на изменение автоинкремента для таблицы mytable.
  9. Подготовить запрос на изменение автоинкремента.
  10. Выполнить подготовленный запрос на изменение автоинкремента.
  11. Освободить подготовленный запрос на изменение автоинкремента.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5