#mysql #mysql-error-1062
Вопрос:
Я получил ошибку 1062 в этом коде :
CREATE DATABASE IF NOT EXISTS `phppoll` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `phppoll`;
CREATE TABLE IF NOT EXISTS `polls` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` text NOT NULL,
`description` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `polls` (`id`, `title`, `description`) VALUES (1, 'What''s your favorite programming language?', '');
CREATE TABLE IF NOT EXISTS `poll_answers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`poll_id` int(11) NOT NULL,
`title` text NOT NULL,
`votes` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `poll_answers` (`id`, `poll_id`, `title`, `votes`) VALUES (1, 1, 'PHP', 0), (2, 1, 'Python', 0), (3, 1, 'C#', 0), (4, 1, 'Java', 0);
Я не знаю, как это исправить.
Комментарии:
1. вы имеете в виду
ERROR 1062 (23000): Duplicate entry '1' for key 'poll_answers.PRIMARY'
, что это означает, что вы всегда должны копировать ПОЛНОЕ сообщение об ошибке.2. Как вы думаете, почему а
DUPLICATE KEY
может существовать? (Подсказка: запустите свой код более 1 раза)3. Кстати: вы получаете 2 такие ошибки, также эту: «ОШИБКА 1062 (23000): Дубликат записи» 1 «для ключевых» опросов. ПЕРВИЧНЫЙ»»
4. За исключением того
CREATE DATABASE
, что код отлично работает в db<>fiddle: <> dbfiddle.uk/.. …5. В случае выполнения
CREATE TABLE IF NOT EXISTS ....
вы должны сделатьDROP TABLE IF EXISTS ...
это непосредственно перед темCREATE TABLE
, чтобы убедиться, что таблица воссоздана заново без записей.
Ответ №1:
Проблема возникает, когда вы запускаете этот сценарий SQL, и в вашей целевой базе данных уже есть таблицы, которые вы хотите создать, И в ней есть строки с уже используемыми идентификаторами. INSERT INTO
Инструкции не будут работать с дубликатами ключей.
В зависимости от того, что вы хотите сделать или как вы хотите создать резервную копию или восстановить ее, вы можете использовать несколько вариантов:
- Вы можете удалить существующие таблицы, чтобы они были добавлены при выполнении SQL-скрипта. Очевидно, что при добавлении таблиц они будут пусты.
- Вы можете удалить все существующие строки в своих таблицах. Когда вы запустите свой SQL-скрипт, таблицы не будут созданы из-за
IF NOT EXISTS
детали, но таблицы будут пустыми. - Вы можете создать дамп MySQL с инструкциями, которые удалят существующие таблицы (и, следовательно, удалят любые строки). Для
mysqldump
команды есть настройка--add-drop-table
для этого. Другие программы экспорта MySQL могут иметь аналогичные опции.