Kho*_*oly 28 mysql sql database
我需要将数据从一个数据库迁移到另一个数据库,两者都在同一个本地系统上.
表和列有不同的名称,我不能从旧数据库迁移所有列,所以
Select *
不适合我.
INSERT INTO newDatabase.table1(Column1, Column2);
SELECT oldDatabase.table1(column1, column2) FROM oldDatabase.table1
Run Code Online (Sandbox Code Playgroud)
但我得到的只是一个 #1064 - Syntax Error
我的查询中的错误是什么,我该如何解决这个问题?
提前致谢
Dam*_*vic 79
您的查询应该是这样的:
INSERT INTO newDatabase.table1 (Column1, Column2)
SELECT column1, column2 FROM oldDatabase.table1;
Run Code Online (Sandbox Code Playgroud)
UPDATE
由于这个答案比我预期的要多得多,我应该扩展这个答案.首先,从答案本身可能并不明显,但列不需要具有相同的名称.因此,以下也可以工作(假设列存在于各自的表中):
INSERT INTO newDatabase.table1 (Column1, Column2)
SELECT SomeOtherColumn, MoreColumns FROM oldDatabase.table1;
Run Code Online (Sandbox Code Playgroud)
此外,它们甚至不需要是表中的真正列.我经常使用的转换数据的一个例子是:
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;
Run Code Online (Sandbox Code Playgroud)
因此,现在可能更明显,规则是,只要SELECT查询返回INSERT查询所需的相同数量的列,就可以使用它来代替VALUES.
小智 6
INSERT INTO db1.table SELECT * FROM db2.table;
Run Code Online (Sandbox Code Playgroud)
如果要将数据复制到不同数据库的相同表。