Как изменить счетчик автоматического увеличения в MySQL? - PullRequest
30 голосов
/ 17 ноября 2011

У меня есть поле идентификатора, которое является моим первичным ключом и просто полем типа int.

У меня меньше, чем 300 строк, но теперь каждый раз, когда кто-то регистрируется, этот идентификатор Auto incвводится очень высоко, как 11800089, 11800090 и т. д. Есть ли способ заставить его вернуться, чтобы он мог следовать порядку (310 311 312) .

Спасибо!

Ответы [ 6 ]

49 голосов
/ 17 ноября 2011
ALTER TABLE tbl AUTO_INCREMENT=310;

Осторожно, вы не хотите повторять ID.Если цифры так высоки, они так или иначе получили это.Убедитесь, что у вас нет связанных данных с более низкими идентификационными номерами.

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

3 голосов
/ 17 ноября 2011

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

Если вы используете MySQL или какой-либо другой сервер SQL, вам потребуется:

  1. Резервное копирование базы данных
  2. Удаление столбца идентификатора
  3. Экспорт данных
  4. TRUNCATE или 'Очистить' таблицу
  5. Повторно создать столбец id как auto_increment
  6. Повторно импортировать данные

Это уничтожит идентификаторы существующих строк, так что, если они важны, это нереальный вариант.

1 голос
/ 11 октября 2017

Счетчик автоматического приращения для таблицы можно (пере) установить двумя способами:

  1. Выполнив запрос, как уже объяснили другие:

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  2. Использование Workbench или другого визуального средства проектирования баз данных. Я покажу в Workbench, как это делается, но в другом инструменте он не должен сильно отличаться. Щелкните правой кнопкой мыши по нужной таблице и выберите Alter table в контекстном меню. Внизу вы можете увидеть все доступные варианты изменения таблицы. Выберите Options, и вы получите эту форму: enter image description here

    Затем просто установите желаемое значение в поле Auto increment, как показано на рисунке. Это в основном выполнит запрос, показанный в первой опции.

1 голос
/ 17 ноября 2011

Предполагаю, что вы используете mysql, потому что вы используете PHP. Вы можете сбросить auto_increment с помощью оператора вроде

 alter table mytable autoincrement=301;

Будьте осторожны, потому что, когда значение auto inc перекрывается, вещи могут сломаться

0 голосов
/ 28 сентября 2016

Я играл с подобной проблемой и нашел это решение:

SET @newID=0;
UPDATE `test` SET ID=(@newID:=@newID+1) ORDER BY ID;
SET @c = (SELECT COUNT(ID) FROM `test`);
SET @s = CONCAT("ALTER TABLE `test` AUTO_INCREMENT = ",@c);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;  

Надеюсь, это поможет кому-то в подобной ситуации!

0 голосов
/ 17 ноября 2011

Я считаю, что mysql делает select max для идентификатора и ставит следующее. Попробуйте обновить идентификаторы вашей таблицы до нужной последовательности. Проблема, с которой вы столкнетесь, заключается в том, что если они связаны, вы должны поставить Cascade на обновление на fk. Вопрос, который приходит мне в голову:

UPDATE Table SET id=(SELECT max(id)+1 FROM TAble WHERE id<700)

700 что-то меньше, чем у вас 11800090 и около 300 WHERE id> 0;

Я считаю, что MySQL жалуется, если вы не поставите куда

...