导入大文件时的 MySQL 奇怪问题:键“PRIMARY”的重复条目

Posted

技术标签:

【中文标题】导入大文件时的 MySQL 奇怪问题:键“PRIMARY”的重复条目【英文标题】:MySQL weird issue while importing a large file: Duplicate entry for key '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,请检查您尝试插入的国家代码是否存在于数据库中? 【参考方案1】:

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

【讨论】:

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

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

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

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

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

【讨论】:

以上是关于导入大文件时的 MySQL 奇怪问题:键“PRIMARY”的重复条目的主要内容,如果未能解决你的问题,请参考以下文章

导入 CSV 文件时的 MySQL 问题 - 不显示错误,但不导入

将 JSON 导入到 Objective-C 时的奇怪输出

关于MySQL中使用LOAD DATA INFILE导入csv文件时的日期格式问题

导入50G文件到mysql,然后再倒入sqlserver

使用 asn.1 编码大整数时的奇怪之处

获取未保存数据时的奇怪核心数据行为