phpMyAdmin导出/导入导致重复的主键错误

时间:2011-05-02 17:06:53

标签: mysql wordpress insert phpmyadmin

我希望使用新的网站网址在Wordpress MySQL数据库中全局替换我网站网址的所有实例。为此,我使用phpMyAdmin将数据库导出到.sql文件,然后在文本编辑器中进行全局替换,然后使用phpMyAdmin导入.sql文件。

在导入期间,我遇到主键错误的重复条目。试图调试这个,我导出了文件,然后导入了相同的文件,没有做任何更改,我仍然得到同样的错误。

我感谢任何帮助解决这个问题。

--
-- Dumping data for table `wp_comments`
--
INSERT INTO  `wp_comments` 
  (`comment_ID`, `comment_post_ID`, `comment_author`, `comment_author_email`
  ,`comment_author_url`, `comment_author_IP`, `comment_date`, `comment_date_gmt` 
  ,`comment_content`, `comment_karma`, `comment_approved`, `comment_agent` 
  ,`comment_type`, `comment_parent`, `user_id`) 
VALUES (1, 1, 'Mr WordPress', ''
       ,'http://wordpress.org/', '', '2011-04-28 00:49:55', '2011-04-28 00:49:55'
       ,'Hi, this is a comment.<br />To delete a comment, 
         just log in and view the post&#039;s comments. 
         There you will have the option to edit or delete them.'
       , 0, 'post-trashed',  '',  '', 0, 0 ) ;

MySQL said: 

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

8 个答案:

答案 0 :(得分:6)

原始数据仍在数据库中。

如果您是手动工作,则会使用新值发送UPDATE而不是INSERT查询,但由于您正在进行批量导入,因此擦除现有内容可能更好在导入之前清理表。

DELETE FROM `tblName`;

请务必先备份您的数据。

答案 1 :(得分:2)

如果您要导出,则表示主要内容保留在数据库中。因此,当您尝试插入具有相同PRIMARY KEY的新行时,它们总是独一无二的,您将收到错误。

解决方案:您必须从表中删除具有相同comment_ID的行。 您必须打开PHPMyAdmin并转到表格页面,然后检查包含所需ID的行。在这种情况下是1,这意味着它可能在您的表列表的第一个结果页面中。只需点击行中显示的红色X.

这也可以通过SQL来完成,这也很简单。

DELETE FROM `wp_comments` WHERE `comment_ID` = 1 LIMIT 1

为此,只需在PHPMyAdmin中选择数据库并转到SQL选项卡,然后在文本区域中插入上面的代码。

答案 2 :(得分:2)

为避免重复,您必须使用UPDATE而不是INSERT语句。要在phpMyAdmin中实现此目的,请按照下列步骤操作:

  1. 在树中选择您的数据库。
  2. 可选的。转到“搜索”选项卡,在所有表中搜索要替换的字符串。如果仅在多个表中找到字符串,请记下它们的名称。这将有助于通过仅更新需要更新的表来加速进程。如果您有大量数据,这一点非常重要。
  3. 转到“导出”标签。
  4. 在“导出方法:”中选择“自定义”。
  5. 可选的。如果您在上面的步骤2中注意到需要更新的表,那么在“表格:”部分中,单击“取消全选”,然后仅选择需要更新的表。
  6. 向下滚动到“数据创建选项”部分,然后在下拉列表中     框标有“转储数据时使用的函数:”选择“更新”     (默认为“INSERT”)。
  7. 点击“开始”。
  8. 打开下载的SQL转储文件。
  9. 重要!在进行任何更改之前,请使用新名称保存文件以进行备份。
  10. 使用搜索&amp;替换编辑器的功能以更改所需内容。然后保存文件。
  11. 在phpMyAdmin中,转到“导入”标签。
  12. 在“要导入的文件:”部分中,单击“选择文件”按钮  浏览已编辑的文件。单击GO
  13. 你准备好了!要检查一切是否正常,请第二次搜索数据库(重复步骤2)。您不应该找到任何包含旧字符串的表。

答案 3 :(得分:1)

有同样的问题和错误号。删除数据库,重新创建没有表,并导入为我工作的已更改导出文件。

答案 4 :(得分:1)

问题与您的文件有关 - 您正在尝试使用副本创建数据库 - 在文件顶部您会看到如下内容:

创建数据库,如果不是EXISTS *THE_NAME_OF_YOUR_DB*默认字符集latin1 COLLATE latin1_general_ci; 使用*THE_NAME_OF_YOUR_DB*;

并且我确定你已经拥有一个具有此名称的数据库 - 在同一台服务器中 - 请检查,因为你试图覆盖!!只需更改名称或(更好)删除此行!

答案 5 :(得分:0)

由于您已经拥有该记录,因此您只需更新记录而不是插入记录。它会像这样。

  UPDATE `wp_comments` 
  SET 'comment_author_url' = 'YOUR NEW ADDRESS'
  WHERE  `comment_ID` = 1

使用此方法更新旧地址的每个实例。您可以通过说“在哪里评论_author_url'='您的旧地址'”来搜索所有帖子。

答案 6 :(得分:0)

如果您要做的只是替换您的网址,我相信这就是您必须做的一切:

Update `wp_comments` Set 
`comment_author_url` = 'http://wordpress.org/'
Where `comment_author` = 'Mr WordPress'

只需在PHPMyAdmin的SQL框中键入上述SQL并执行。

注意:首先确保您有备份。并且没有必要做所有导出和导入的东西:)

答案 7 :(得分:0)

将代码更改为

INSERT .... (what you already have) 
ON DUPLICATE KEY UPDATE;

这样可以轻松解决您的问题,同时仍插入新行。