【问题标题】:MySQL weird issue while importing a large file: Duplicate entry for key 'PRIMARY'导入大文件时的 MySQL 奇怪问题:键“PRIMARY”的重复条目
【发布时间】:2012-06-14 23:53:59
【问题描述】:

我的托管公司希望我从 MySQL 4 服务器迁移到 MySQL 5.5 服务器。 我的数据库比较大,因为我的网站拥有近 200,000 多名注册用户的数据。

我使用 PHPMyAdmin 导出了我的所有表,现在我正尝试将它们导入新服务器。一切都很顺利,直到我尝试导入“用户”表。有关信息,这里是它的结构:

CREATE TABLE IF NOT EXISTS `user` (
`login` varchar(32) NOT NULL DEFAULT '',
`firstname` varchar(255) NOT NULL DEFAULT '',
`lastname` varchar(255) NOT NULL DEFAULT '',
`email` varchar(255) NOT NULL DEFAULT '',
...
PRIMARY KEY (`login`),
KEY `country_code` (`country_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

没什么了不起的,对吧?使用 PHPMyAdmin 导入选项卡,我上传了 SQL 文件。突然,我收到以下错误:

#1062 - Duplicate entry 'Jobi' for key 'PRIMARY' 

我立即查询数据库并搜索登录为“Jobi”的用户名。不匹配!

我查看了生成错误的查询并尝试手动执行...

INSERT INTO `ft_user`
  (`login`, `firstname`, `lastname`, `email`, ...)
VALUES
  ('Jobi', 'Lorem-First', 'Ipsum-Last', 'xxxxx@yyyy.com', ...);

而且效果很好!

我在我的开发机器上进行了测试,得到了同样的错误。 有人可以解释一下我在这里做错了什么吗?

提前谢谢你。非常感谢任何帮助。

赫维。

【问题讨论】:

  • 您好 Herve,请检查您尝试插入的国家代码是否存在于数据库中?

标签: mysql import phpmyadmin


【解决方案1】:

如果输入文件包含具有相同主键值的记录的两个副本,您可能会收到此错误,但是当事务回滚时,该键将不再存在。检查您的输入文件是否有重复项。

【讨论】:

  • 好的。知道了 !另一个登录名为“jobì”的用户在上面插入了两行......我怎样才能在 MySQL 的 jobì 和 jobi 之间做出区别?它曾经与 MySQL 4 一起工作。
  • 在批量上传中,我认为你不能。您可能必须预处理数据以更改数据,或者使索引不唯一并为主键选择其他内容(生成的 ID),然后在加载后清理它。
  • 谢谢吉姆。我将检测重复项并提醒用户他们的登录名已更改
【解决方案2】:

在 phpMyAdmin 的设置选项卡中,您可以尝试检查以下值:

设置 -> SQL 查询 -> 忽略多个语句错误 如果您使用的是 CSV 格式:

设置 -> 导入 -> CSV -> 插入错误时不要中止 如果您使用的是 SQL 格式:

设置 -> 导出 -> SQL -> 使用忽略插入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2012-08-24
    相关资源
    最近更新 更多