我需要将一数据库的数据迁移到另一个数据库,两者都在同一本地系统上。
表格和列名不同,我不能迁移旧数据库中的所有列,因此
Select *
对我无效。
INSERT INTO newDatabase.table1(Column1, Column2);
SELECT oldDatabase.table1(column1, column2) FROM oldDatabase.table1
但是我得到的只是一个#1064语法错误
我的查询中有什么错误,我该如何修复?
先行致谢。
我需要将一数据库的数据迁移到另一个数据库,两者都在同一本地系统上。
表格和列名不同,我不能迁移旧数据库中的所有列,因此
Select *
对我无效。
INSERT INTO newDatabase.table1(Column1, Column2);
SELECT oldDatabase.table1(column1, column2) FROM oldDatabase.table1
但是我得到的只是一个#1064语法错误
我的查询中有什么错误,我该如何修复?
先行致谢。
你的查询应该像这样:
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的替代。
INSERT INTO db1.table SELECT * FROM db2.table;
如果你想将数据复制到不同数据库的相同表中。
INSERT INTO newDatabase.newtable1 (newColumn1, newColumn2)
SELECT oldcolumn1, oldcolumn2 FROM oldDatabase.oldtable1;
CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table
SELECT column_name FROM db1.table