Почему этот дамп завершается ошибкой при импорте?

#mysql

#mysql

Вопрос:

Это моя таблица с данными :

 CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `user` varchar(255) NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

--
-- Dump dei dati per la tabella `categories`
--

INSERT INTO `categories` (`id`, `name`, `user`, `date`) VALUES(1, 'K-Bal Sound System', 'djfonplaz', '0000-00-00 00:00:00');
INSERT INTO `categories` (`id`, `name`, `user`, `date`) VALUES(2, 'Network23 Mixtapes', 'djfonplaz', '0000-00-00 00:00:00');
INSERT INTO `categories` (`id`, `name`, `user`, `date`) VALUES(3, 'Artskorps Webmix', 'djfonplaz', '0000-00-00 00:00:00');
INSERT INTO `categories` (`id`, `name`, `user`, `date`) VALUES(4, 'GTW Users Mixes', 'djfonplaz', '0000-00-00 00:00:00');
INSERT INTO `categories` (`id`, `name`, `user`, `date`) VALUES(5, 'Underground Music Tapes', 'djfonplaz', '0000-00-00 00:00:00');
INSERT INTO `categories` (`id`, `name`, `user`, `date`) VALUES(6, 'UK Main Events', 'djfonplaz', '0000-00-00 00:00:00');
INSERT INTO `categories` (`id`, `name`, `user`, `date`) VALUES(7, 'Gabba Nation, Bunker amp; Box, German Events', 'djfonplaz', '0000-00-00 00:00:00');
  

Когда я пытаюсь импортировать это (с HeidiSQL 6.0) Я получаю эту ошибку :

 /* SQL Error (1062): Duplicate entry '1' for key 1 */
  

?

Ответ №1:

Таблица categories должна существовать, и в ней уже есть данные.

Удалите categories таблицу перед выполнением этого скрипта.

Комментарии:

1. Разве строка: «СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ ОНА НЕ СУЩЕСТВУЕТ categories » не позаботится об этом?

2. Нет — он просто создает таблицу, если она еще не создана. Если таблица существует, она пропускает эту часть. Итак, в этой таблице есть данные с ключом 1 , и следующие строки пытаются снова вставить строку с ключом 1 . Таблица должна быть удалена / усечена раньше.

3. Да, извините, я понимаю, что вы имеете в виду.

Ответ №2:

если вы установили auto_increment на первичный ключ, удалите инструкции id in INSERT

 INSERT INTO `categories` (`name`, `user`, `date`) VALUES('K-Bal Sound System', 'djfonplaz', '0000-00-00 00:00:00');
...
  

Комментарии:

1. Тогда это не точный дамп базы данных — строка с ключом 1 теперь может быть строкой с ключом 34 . Во время доступа к этой строке по идентификатору мы получим что-то другое, чем ожидалось.

2. Итак, сначала сбросьте счетчик: измените категории таблицы AUTO_INCREMENT = 0.

3. Данные в таблице все еще будут существовать. Когда markzzz вставляются данные с указанными id s, они будут игнорироваться AUTO_INCREMENT .

4. если данные существуют в таблице, мой первый ответ работает хорошо, если не существует и вам нужен первый id = 1, вам нужно сбросить счетчик…

5. Конечно, но есть одна вещь, которую вы должны помнить. Если вы создаете дамп базы данных и выполняете этот скрипт где-то еще, вы ожидаете точно такую же структуру с теми же данными, что и исходная база данных. С вашим решением этого не произойдет. Например, несоответствие FK s и т.д.

Ответ №3:

Вы вставляете значение для своего поля автоматического увеличения. MySQL автоматически вставит значение в это поле для вас, поэтому вам не нужно пытаться установить значение самостоятельно. Когда он пытается вставить вашу первую строку, он попытается ввести 1 поверх значения автоматического увеличения 1.

Чтобы исправить, просто удалите столбец id из вашей вставки.

Комментарии:

1. Тогда это не точный дамп базы данных — строка с ключом 1 теперь может быть строкой с ключом 34. Во время доступа к этой строке по идентификатору мы получим что-то другое, чем ожидалось.

2. Это всего лишь 10 строк кода из 25000. Я экспортирую его с помощью интерфейса phpMyAdmin: что я могу для этого сделать?

3. Как я сказал в своем ответе — вы должны удалить все существующие таблицы перед выполнением вашего скрипта.

4. Я понимаю, что вы хотите сказать, извините за путаницу. Да, hsz прав, вам нужно удалить таблицу, если она существует.