2012-06-12 52 views
1

我的托管公司希望我从MySQL 4服务器迁移到MySQL 5.5服务器。 我的数据库比较大,因为我的网站拥有近200,000多个注册用户的数据。导入大文件时出现MySQL奇怪问题:重复输入密钥'PRIMARY'

我使用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', '[email protected]', ...); 

和它的工作就好了!

我在我的开发机器上做了测试,得到了同样的错误。 有人能解释我在这里做错了吗?

预先感谢您。任何帮助真的很感激。

Hervé。

+0

嗨埃尔韦, 请检查我f您尝试插入的国家/地区代码是否存在于数据库中? –

回答

1

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

+0

好的。得到它了 !另一位登录名为“jobì”的用户被插入了上面两行......我如何才能在jobì和jobi之间为MySQL做出区别?它曾经与MySQL 4一起工作。 –

+0

在批量上传中,我认为你不能。您可能必须预处理数据才能更改数据,或者使索引不唯一,并为主键选择其他内容(生成的ID),然后在加载后清除它。 –

+0

谢谢吉姆。我将检测重复项并提醒用户他们的登录信息已更改 –

0

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

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

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

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