Мы запускаем импорт существующей таблицы продуктов в новую таблицу. Импорт script, который мы написали, отлично работает и вставляет нужное количество строк (6000 или около того). Однако после импорта следующий автоматически увеличиваемый первичный ключ/идентификатор составляет 1500 записей (или около того) выше числа строк в таблице.
Мы не можем понять, почему MySQL делает это, и мы хотели бы, чтобы он остановился. Я делал обычные поиски в Интернете, ища помощь, но я рисую пустой - любые идеи?
Возьмем эту простую таблицу, например:
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 и было бы colide с строкой № 3.
Если вы хотите, чтобы чистый старт и последний id равны количеству строк, вам нужно либо избавиться от столбца "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;
Первый запрос задает вспомогательную переменную, которая будет увеличена до обновления записи. Второй - обновляет запись, чтобы иметь id, равный номеру строки. Третий изменит колонку id, которая будет автоинкрементной, и установите правильное значение для следующего autoindex.
Но прежде чем менять какие-либо первичные ключи, убедитесь, что они не используются в других таблицах как внешние ключи!
SELECT MAX(id) FROM products
после импорта данных или ALTER TABLE products ORDER BY id
и смотрите, есть ли в последних строках предсказанные значения?
Если вы выполните эту команду:
show create table Foo
Затем вы увидите, что установлен параметр AUTO_INCREMENT=
.
Я предполагаю, что он не настроен на запуск с 0.
Затем вы должны создать свою новую таблицу, чтобы установить AUTO_INCREMENT в 0 (или 1, я не могу вспомнить с верхней части головы). Это должно сделать трюк.