Как изменить счетчик автоматического увеличения в MySQL?
У меня есть поле ID, которое является моим первичным ключом и является просто полем int.
У меня есть менее 300 строк, но теперь каждый раз, когда кто-то подписывает, что идентификатор auto inc вводится очень высоко, как 11800089, 11800090 и т.д.... Есть ли способ заставить это вернуться, чтобы он мог следовать (310 311 312).
Спасибо!
Ответы
Ответ 1
ALTER TABLE tbl AUTO_INCREMENT=310;
Остерегайтесь, однако, вы не хотите повторять идентификатор. Если эти цифры высоки, они как-то так поступили. Будьте уверены, что у вас нет связанных данных с более низкими идентификационными номерами.
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
Ответ 2
Возможно, это будет более быстрый путь, но я бы это сделал, чтобы убедиться, что я воссоздаю идентификаторы;
Если вы используете MySQL или какой-либо другой SQL-сервер, вам необходимо:
- Резервное копирование вашей базы данных
- Отбросить столбец id
- Экспорт данных
-
TRUNCATE
или "Пусто" таблицы
- Создайте столбец
id
как auto_increment
- Reimport данные
Это уничтожит идентификаторы существующих строк, поэтому, если они важны, это не жизнеспособный вариант.
Ответ 3
Предполагаю, что вы используете mysql, потому что используете PHP. Вы можете reset auto_increment с выражением типа
alter table mytable autoincrement=301;
Будьте осторожны, потому что вещи будут ломаться, когда значение auto inc перекрывается
Ответ 4
Счетчик автоматического приращения для таблицы может быть (повторно) установлен двумя способами:
-
Выполняя запрос, как и другие, уже объясненные:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
-
Использование инструмента Workbench или другого средства визуального проектирования баз данных. Я покажу в Workbench, как это делается - но это не должно сильно отличаться в другом инструменте. Щелкните правой кнопкой мыши нужную таблицу и выберите Alter table
в контекстном меню. Внизу вы можете увидеть все доступные параметры для изменения таблицы. Выберите Options
, и вы получите эту форму:
![введите описание изображения здесь]()
Затем просто установите желаемое значение в поле Auto increment
, как показано на изображении.
Это будет в основном выполнять запрос, показанный в первом варианте.
Ответ 5
Я считаю, что mysql делает выбор max на id и ставит следующее. Попробуйте обновить идентификаторы вашей таблицы до нужной последовательности. Проблема, с которой вы столкнетесь, связана с тем, что они связаны, вы должны поместить Cascade в обновление на fk.
Вопрос, который приходит мне на ум:
UPDATE Table SET id=(SELECT max(id)+1 FROM TAble WHERE id<700)
700 чем-то меньше, чем у 11800090 у вас есть и рядом с 300 WHERE id > 0;
Я считаю, что жалобы mysql, если вы не ставите где
Ответ 6
Я искал аналогичную проблему и нашел это решение:
SET @newID=0;
UPDATE `test` SET ID=(@newID:[email protected]+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;
Я надеюсь, что это поможет кому-то в подобной ситуации!