#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 прав, вам нужно удалить таблицу, если она существует.