【问题标题】:#1062 eror in mysql#1062 mysql中的错误
【发布时间】:2021-11-18 08:36:30
【问题描述】:

我在这段代码中遇到 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);

我不知道如何解决它。

【问题讨论】:

  • 您的意思是ERROR 1062 (23000): Duplicate entry '1' for key 'poll_answers.PRIMARY',这意味着您应该始终复制完整的错误消息。
  • 为什么,你认为DUPLICATE KEY 可以存在? (提示:运行代码超过 1 次)
  • 顺便说一句:您遇到了 2 个这样的错误,还有一个:“ERROR 1062 (23000): Duplicate entry '1' for key 'polls.PRIMARY'”
  • 除了CREATE DATABASE,代码在db中运行良好fiddle:dbfiddle.uk/….
  • 在执行CREATE TABLE IF NOT EXISTS .... 时,您应该在CREATE TABLE 之前执行DROP TABLE IF EXISTS ...,以确保在没有记录的情况下重新创建表。

标签: mysql mysql-error-1062


【解决方案1】:

当您运行此 SQL 脚本并且您的目标数据库已经有您要创建的表并且它具有已使用 id 的行时,就会出现问题。 INSERT INTO 语句将失败重复键。

根据您要执行的操作或创建备份或恢复备份的方式,您可以使用多个选项:

  1. 您可以删除现有的表,以便在执行 SQL 脚本时添加它们。添加表格后,它们显然是空的。
  2. 您可以删除表中的所有现有行。运行 SQL 脚本时,由于IF NOT EXISTS 部分,不会创建表,但表将为空。
  3. 您可以使用将删除现有表(并因此删除任何行)的语句创建 MySQL 转储。对于mysqldump 命令,有一个设置--add-drop-table 可以做到这一点。其他 MySQL 导出程序可能有类似的选项。

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 2018-11-27
    • 2011-08-12
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    相关资源
    最近更新 更多