从另一个数据库中插入到 MySQL 的 Insert Into

36

我需要将一数据库的数据迁移到另一个数据库,两者都在同一本地系统上。

表格和列名不同,我不能迁移旧数据库中的所有列,因此

Select * 对我无效。

INSERT INTO newDatabase.table1(Column1, Column2);
SELECT oldDatabase.table1(column1, column2) FROM oldDatabase.table1

但是我得到的只是一个#1064语法错误

我的查询中有什么错误,我该如何修复?

先行致谢。


也许你需要在表名后面加一个空格,然后再加上 (。 - marcosh
你的MySQL SELECT语法有误。我猜你还没有阅读手册(https://dev.mysql.com/doc/refman/5.0/en/select.html)? - Tim Burch
4个回答

112

你的查询应该像这样:

INSERT INTO newDatabase.table1 (Column1, Column2) 
SELECT column1, column2 FROM oldDatabase.table1;

更新

由于这个回答比我预期的还要受到更多关注,我应该对此回答进行扩展。首先,可能不是很明显,但是列名不需要相同。因此,以下内容也可以正常工作(假设列存在于各自的表中):

INSERT INTO newDatabase.table1 (Column1, Column2) 
SELECT SomeOtherColumn, MoreColumns FROM oldDatabase.table1;

此外,它们甚至不需要是表中的实际列。我经常使用的一个用于转换数据的示例是:

INSERT INTO newDatabase.users (name, city, email, username, added_by) 
SELECT CONCAT(first_name, ' ', last_name), 'Asgard', CONCAT(first_name,'@gmail.com'), CONCAT(first_name,last_name), 'Damir' FROM oldDatabase.old_users;

所以,现在可能更加明显了,规则是,只要SELECT查询返回与INSERT查询所需的列数相同,就可以将其用作VALUES的替代。


@M.Abulsoud 在这种情况下,“ON DUPLICATE KEY UPDATE”可能会起作用。我不确定简单的“UPDATE”是否适用,因为它实际上取决于您尝试更改什么以及如何更改。 - dkasipovic
我不能在这里使用ON DUPLICATE实用程序。 - M.Abulsoud
1
如果目标表中存在重复行,并且您不希望覆盖它们,可以使用"IGNORE"关键字,像这样:INSERT IGNORE INTO db1.table SELECT * FROM db2.table; 请谨慎使用,因为它将忽略所有错误,而不仅仅是重复问题。 - digitalway

6
INSERT INTO db1.table SELECT * FROM db2.table;

如果你想将数据复制到不同数据库的相同表中。


4
你说“表格和列名字不同”,但你仍然使用了相同的名字。试试这个:
INSERT INTO newDatabase.newtable1 (newColumn1, newColumn2) 
SELECT oldcolumn1, oldcolumn2 FROM oldDatabase.oldtable1;

1
CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table 
SELECT column_name FROM db1.table

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接