ошибка #1062 в mysql

#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 Инструкции не будут работать с дубликатами ключей.

В зависимости от того, что вы хотите сделать или как вы хотите создать резервную копию или восстановить ее, вы можете использовать несколько вариантов:

  1. Вы можете удалить существующие таблицы, чтобы они были добавлены при выполнении SQL-скрипта. Очевидно, что при добавлении таблиц они будут пусты.
  2. Вы можете удалить все существующие строки в своих таблицах. Когда вы запустите свой SQL-скрипт, таблицы не будут созданы из-за IF NOT EXISTS детали, но таблицы будут пустыми.
  3. Вы можете создать дамп MySQL с инструкциями, которые удалят существующие таблицы (и, следовательно, удалят любые строки). Для mysqldump команды есть настройка --add-drop-table для этого. Другие программы экспорта MySQL могут иметь аналогичные опции.