如何合并两个表(包括主键和范围限制)

Posted

技术标签:

【中文标题】如何合并两个表(包括主键和范围限制)【英文标题】:how to merge two tables (incl. Primary Key and Range Limit) 【发布时间】:2015-01-13 10:41:19 【问题描述】:

我昨天做了一个冒险并删除了 mysql 表中的一些行(幸运的是我设置了 LIMIT 2000)。

现在我想使用备份再次仅插入已删除的行。我得到了:

tb_production:

id (primary key)   col1     col2
--------------------------------
   1               data     data
   2               data     data
   6               data     data
   9               data     data

如您所见,缺少行。 现在我想将备份表中缺失的行插入到(上面的)生产表中:

tb_backup:

   id (primary key)   col1     col2
    --------------------------------
       1               data     data
       2               data     data
       3               data     data
       4               data     data
       5               data     data
       6               data     data
       7               data     data
       8               data     data
       9               data     data

我在 *** (How can I merge two MySQL tables?) 上找到了一个很好的答案,给出了答案:

INSERT IGNORE INTO table_1 SELECT * FROM table_2;

我不想再犯错,所以我问你:

如何将备份表中的行合并到生产表中,不覆盖生产表中的现有行并再次使用 LIMIT 2000

【问题讨论】:

我不清楚你的问题....你有备份数据吗? @Vamshi.goli 是的,我有一个 2 周前的数据库备份,总比没有好。我想使用表中的行从那里插入到正在运行的数据库中。 现在你想把那些数据库插入到现有的数据库中吧!!!!!!!!! @Vamshi.goli 不,我只会从备份中转储表,将其插入生产数据库(之前重命名表),然后将备份表中缺少的行复制到使用的表中在生产数据库中。 生产表中的 id 值和备份表中的 id 值是一样的吗?......我想知道......你问过你不想覆盖的权利!!!!!!!!! 【参考方案1】:

请尝试以下查询

INSERT INTO tb_production(id,col1,col2)
    SELECT bkp.id,bkp.col1,bkp.col2 FROM tb_backup bkp LEFT JOIN tb_production prd
    ON bkp.id=prd.id WHERE prd.id IS NULL ORDER BY bkp.id LIMIT 2000;

【讨论】:

以上是关于如何合并两个表(包括主键和范围限制)的主要内容,如果未能解决你的问题,请参考以下文章

如何避免没有主键和唯一键的重复条目?

在MySQL中如何设置主键和外键

3.啥是键、候选键、主键和外键?

如何迁移使用主键和自动增量值 SQL 2008 R2 的两个数据库

如何从特定数据库中的所有表中检索不属于主键和外键的所有列

02-线性结构1 两个有序链表序列的合并