2017-02-22 16 views
0

В моей таблице есть идентификатор имени столбца, который является auto increment integer. Когда я усекаю таблицу, а затем пытаюсь выполнить запрос вставки, она начинается с 1, но если я удалю операцию и затем попытаюсь вставить, она просто возобновится с предыдущего значения. Почему вставка запроса выполняется по-разному для удаления и усечения. Он всегда должен начинаться с 1, если в таблице нет записи.Вставка после усечения начала с 1; но вставить после удаления резюме из предыдущего значения

Пример: (1) Оригинальные Таблица enter image description here

(2) удалить все строки, а затем вставить enter image description here

(3) усечение таблица затем вставить enter image description here

+0

FYI ...... всякий раз, когда вы усекаете его сброс идентификатора, а в случае операции удаления его начало с последнего значения id + 1 –

+0

я упомянул верхний, что является другим основным различием между удалением и усечением –

+0

Это ожидаемое поведение см. в https://dev.mysql.com/doc/refman/5.7/en/delete.html под заголовками автоинкрементных столбцов. Если вам нужно сбросить после удаления все, используйте таблицу alter или drop и создайте таблицу. –

ответ

1

Ток макс значение для функции автоинкремента сохраняется в определении таблицы (вы можете видеть ее при запуске show create table idle. Когда вы удаляете все строки из t он стол, значение автоинкремента останется неизменным. Когда вы обрезаете стол, вы в основном бросаете стол и воссоздаете его, что сбрасывает значение автоинкремента на 0.

Надеюсь, это поможет.

+0

, а что, если мне нужно начать с 1 после операции удаления, есть ли способ? – WeAreRight

+0

@JoneDotosvky есть ли 'id> 0'? – MohaMad

+1

Как указал МохаМад: 'ALTER TABLE tablename AUTO_INCREMENT = 1;' должно установить начальное значение равным 1. –

1

Я думаю, что вы собираетесь сбросить автоматическое приращение, выполнить этот запрос после delete запроса:

ALTER TABLE tablename AUTO_INCREMENT = 1 ; 

Примечания: будьте осторожны дубликатами ключей, если вы удалите некоторые идентификаторы и сброс идентификаторов 1, в то время как идентификатор = 2 или n существует!

Обратите внимание, что вы не можете сбросить счетчик на значение, меньшее или равное тому, которое уже было использовано. Для MyISAM, если значение меньше или равно максимальному значению, находящемуся в настоящий момент в столбце AUTO_INCREMENT, значение сбрасывается до текущего максимума плюс один. Для InnoDB, если значение меньше текущего максимального значения в столбце, ошибка не возникает, и текущее значение последовательности не изменяется.

некоторые другие действия и заметки упоминается в this topic

0

вы даете AUTO INCREMENT в id, поэтому она ведет себя как this.whenever вы усечь его сбросить идентичность, в случае операции удаления его запуска от последнего значения Ваш ID. если это не хотите, удалите AUTO INCREMENT с id.