Давайте возьмем эту простую таблицу, например:
CREATE TABLE `products` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(64) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
И файл импорта, который выглядит так:
"id","name"
1,"product 1"
2,"product 2"
5,"product 3"
102,"product 4"
Затем вы импортируете данные в оба столбца, поэтому механизм автоматического увеличения не работает.
После импорта всех строк значение автоинкремента для таблицы устанавливается равным MAX (id) + 1 [ 103 в этом случае], чтобы следующий уникальный идентификатор автоинкрементации был уникальным. Если бы оно было равно числу вставленных строк, то следующим значением автоинкремента было бы 5, и оно совпадало бы со строкой № 3.
Если вы хотите, чтобы чистый начальный и последний идентификаторы были равны количеству строк, вам нужно либо избавиться от столбца «id» из файла .csv , либо создать таблицу без AUTO_INCREMENT для id , импортируйте данные и запустите этот простой sql:
SET @i=0;
UPDATE `products` SET id=@i:=@i+1 ORDER BY id;
ALTER TABLE `products` CHANGE COLUMN `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST;
Первый запрос устанавливает вспомогательную переменную, которая будет увеличиваться перед обновлением записи.
Второй обновляет запись, чтобы иметь идентификатор, равный номеру строки.
Третий изменит идентификатор столбца для автоинкремента и установит правильное значение для следующего автоиндекса.
Но перед изменением любых первичных ключей убедитесь, что они не используются ни в каких других таблицах в качестве внешних ключей!