如何将行从一个 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 JOIN
和WHERE
。 (另见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 创建重复项?