将MySQL转储与现有表合并

时间:2014-03-05 19:57:03

标签: mysql wordpress merge phpmyadmin dump

带有表单插件的WordPress网站的用户意外删除了特定表单的所有条目。

我进入了每日备份,我有一个.sql文件,其中包含表格信息存储的所有数据。

现在我需要将它合并回数据库,但转储使用INSERT INTO并立即停止并出现错误,因为大多数条目已经存在。

我尝试使用“ON DUPLICATE KEY UPDATE id = id”,但它忽略了所有内容。

我一直在这里和Google上搜索几个小时而没有任何解决方案。

转储的基础是:

LOCK TABLES `wp_frm_items` WRITE;
INSERT INTO `wp_frm_items` (`id`, `item_key`, `name`, `description`, `ip`, `form_id`, `post_id`, `user_id`, `parent_item_id`, `updated_by`, `created_at`, `updated_at`) VALUES (2737,'jb7x3c','Brad Pitt','a:2:{s:7:\"browser\";s:135:\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25\";s:8:\"referrer\";s:38:\"http://mysite/myform/\r\n\";}','192.168.1.1',6,0,NULL,NULL,NULL,'2013-06-30 15:09:20','2013-06-30 15:09:20');
UNLOCK TABLES;

ID#2737存在,所以我要么忽略它,要么只是更新现有的表。

似乎有一种简单的方法可以将数据从MySQL转储导入现有数据库。

PS。我正在尝试在phpMyAdmin中执行此操作

1 个答案:

答案 0 :(得分:1)

如果这些行的数据没有更改,您可以使用REPLACE代替INSERT

如果要跳过行,一种可能是使用临时表。在那里加载行并DELETE那些具有旧表中存在的id的行。

DELETE FROM my_new_temptable AS temp WHERE temp.id IN (SELECT id FROM wp_frm_items)

然后将其余行插入wp_frm_items

或者,您可以在从转储恢复之前将新行移动到临时表,并将它们从那里复制回原始表。有很多种可能性。

此外,许多SQL工具都具有表合并功能。