Переиндексация первичных ключей MySQL INT и сброс AUTO_INCREMENT - PullRequest
3 голосов
/ 08 июля 2011

Итак, у меня есть база данных MySQL, которую я использую с сайтом PHP.За несколько недель разработки у меня осталось что-то вроде:

Table: users

id  | name
-----------
  12| Bob
  34| Jen
 155| John
 154| Kyle

За исключением того, что это продолжается для сотен записей, а идентификаторы исчисляются тысячами.

Яв поисках сценария, который я могу запустить, чтобы переименовать ключи к их наименьшему значению (сохраняя их соответствующие строки), а затем сбросить AUTO_INCREMENT до следующего идентификатора

. Желаемое значение будет:

Table: users

id  | name
-----------
   1| Bob
   2| Jen
   3| Kyle
   4| John

И ALTER TABLE users AUTO_INCREMENT = 5;

(Уведомление Kyle и John)

Я понимаю, что мне придется исправить все, что ссылается на users.id.

Кто-нибудь знает способ сделать это в MySQL или с помощью сценария PHP?

Ответы [ 2 ]

5 голосов
/ 08 июля 2011

удалить индекс по id

сделать что-то вроде этого:

SET @rank:=0;
update users
set id=@rank:=@rank+1
order by id;

добавить индекс по id

1 голос
/ 09 июля 2011

Зачем вам нужно менять порядок имен в базе данных? Вы можете просто добавить предложение ORDER BY name в свой SQL-запрос, чтобы получить результаты в алфавитном порядке по имени.

...