如何将行从一个 MySQL 数据库复制到另一个

Posted

技术标签:

【中文标题】如何将行从一个 MySQL 数据库复制到另一个【英文标题】:How to copy rows from one MySQL database to another 【发布时间】:2014-01-06 11:44:38 【问题描述】:

我在不同的数据库(WAMP 服务器)中有两个具有相同结构的表。我想将第二个数据库 (oldkt) 中不存在的所有行从第一个数据库 (newkt) 复制到第二个数据库 (oldkt)。

newkt   -> table : users (1500 records) (id, name, password)
oldkt   -> table : users (1200 records) (id, name, password)

我想实际将行添加到 oldkt 数据库中,其 ID 在 oldkt 中尚不存在。

另外,如果我有超过 3 列,是否可以自动添加这些列,或者我必须标记所有列?

【问题讨论】:

使用普通 SQL,但在表名前加上数据库名 + 点,如这里 ***.com/questions/2132654/… 到目前为止您尝试过什么?如果你显示你的 sql 语句,它会更容易指导你。 到目前为止什么都没有,我怕我会把桌子弄乱了..!!! 您实际使用的是哪个 DBMS? mysql 还是 SQL Server? 在您对 ANYTHING 进行任何操作之前。曾经 。做一个备份。 【参考方案1】:

您可以执行以下操作:

    insert into database1.table  select * from database2.table where id not in(select id from database1.table);

【讨论】:

【参考方案2】:

如前所述,您应该能够执行典型的插入,但通过在查询中指定数据库名称:

SELECT * 
INTO TargetDatabase.dbo.TargetTable
FROM SourceDatabase.dbo.SourceTable 

【讨论】:

非常感谢您的快速回复 我得到一个错误 Undeclared variable: oldkt_ which is the name of the first database【参考方案3】:

试试这个查询

INSERT Table2
SELECT * FROM Table1
WHERE [Conditions]

【讨论】:

【参考方案4】:
INSERT INTO oldkt   
SELECT id , name ,password FROM newkt WHERE id NOT IN (SELECT id FROM oldkt ) 

Check Here

【讨论】:

【参考方案5】:

试试下面的代码:

INSERT INTO TargetDatabase.dbo.TargetTable
SELECT * FROM SourceDatabase.dbo.SourceTable 
EXCEPT 
SELECT * FROM TargetDatabase.dbo.TargetTable

【讨论】:

所以我尝试了以下 INSERT INTO oldkt_.dbo.jos_users SELECT * FROM kenaktoolsdata.dbo.jos_users EXCEPT * FROM oldkt_.dbo.jos_users 但我收到错误 #1064 - You have an error in你的 SQL 语法;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“.jos_users SELECT * FROM kenaktoolsdata.dbo.jos_users EXCEPT SELECT * FROM oldkt”附近使用正确的语法 上面的代码是为 SQL Server 给出的,在这种情况下,对于我的 SQL,请使用下面的代码和左外连接 'INSERT TargetDatabase.dbo.TargetTable SELECT a.* FROM SourceDatabase.dbo.SourceTable a LEFT JOIN TargetDatabase.dbo.TargetTable b ON a.col1=b.col1 and ..... WHERE b.col1 IS NULL or b.col2 is null .....'【参考方案6】:

免责声明:最初,OP 将问题标记为 mysql 和 sql-server。我为两者都提供了答案,因为它是一个比纯 MySQL 更通用的解决方案。 使用 MySQL 时,请务必将查询中的 .. 替换为 .

SELECT … INTO table does not work in MySQL(尽管it works in SQL Server)所以INSERT … SELECT 会帮助你。它适用于MySQL 和SQL Server。

您可以在 SQL Server 中使用.(点)分隔符in MySQL 和..(双点)分隔符指定表名,包括数据库名称。 (另见a related question。)

EXCEPT does not work in MySQL 所以我们将使用LEFT JOINWHERE。 (另见a related question。)

对于 SQL Server:

INSERT INTO oldkt..users
SELECT newkt..users.*
FROM
    newkt..users
    LEFT JOIN oldkt..users USING(id)
WHERE
    oldkt..users.id IS NULL

在 MySQL 中使用时,只需将 .. 替换为 .

我的解决方案是在 id 是两个表中的唯一键的假设下工作的。 (主键始终是唯一的。)如果不满足,则必须根据该事实调整连接条件。

【讨论】:

非常感谢您的回答,但我收到此错误 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“.jos_users SELECT kenaktoolsdata..jos_users.* FROM kenaktoolsdata..jos_us”附近使用正确的语法 INSERT INTO oldkt_..jos_users SELECT kenaktoolsdata..jos_users.* FROM kenaktoolsdata..jos_users LEFT JOIN oldkt_..jos_users USING(id) WHERE oldkt_..users.id 为空 @KoZe 您使用了我为 MySQL 中的 MS SQL Server 编写的查询。正如我所写,将所有.. 替换为.,它会为您工作。另请参阅问题下方的 cmets,尤其是要求您指定使用 MySQL 还是 SQL Server 的 cmets。我为两者都提供了答案。 我做了并且有同样的错误......无论如何这工作插入到 database1.table select * from database2.table where id not in(select id from database1.table);可能;成功了吗?它的mysql @Koze 如果您将所有.. 替换为.,您将不会得到相同的错误,因为原始错误消息包含..。如果您通过mysql 命令运行查询,则始终需要在末尾添加;,否则不会执行。我编辑了您的问题以反映您在问 MySQL 问题。

以上是关于如何将行从一个 MySQL 数据库复制到另一个的主要内容,如果未能解决你的问题,请参考以下文章

如何将行从一个 Excel 工作表复制到另一个工作表并使用 VBA 创建重复项?

将行从一个选项卡复制并删除到另一个选项卡

调用触发器时将行从一个表复制到另一个表

如何将选定的行从一个 wpf 数据网格复制到另一个 wpf 数据网格? [关闭]

sql 将行从一个表复制到另一个表

将行从一个链接表插入到另一个链接表