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

时间:2014-01-06 11:44:38

标签: mysql sql

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

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

我想实际向oldkt数据库中添加行,但{id}}中的id不存在。

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

6 个答案:

答案 0 :(得分:7)

您可以执行以下操作:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

请尝试以下代码:

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

答案 3 :(得分:0)

INSERT INTO oldkt   
SELECT id , name ,password FROM newkt WHERE id NOT IN (SELECT id FROM oldkt ) 

Check Here

答案 4 :(得分:0)

尝试此查询

INSERT Table2
SELECT * FROM Table1
WHERE [Conditions]

答案 5 :(得分:0)

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

SELECT … INTO table does not work in MySQL(虽然it works in SQL Server)所以INSERT … SELECT会帮助您。它适用于MySQLSQL 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是两个表中的唯一键的情况下工作。 (主键始终是唯一的。)如果不满足,则必须根据该事实调整连接条件。