web-dev-qa-db-fra.com

MySQL Insert Into d'une base de données à une autre

J'ai besoin de migrer les données d'une base de données vers une autre, les deux sont sur le même système local.

Les tables et les colonnes ont des noms différents et je ne dois pas migrer toutes les colonnes de l'ancienne base de données, donc 

Select * ne fonctionne pas pour moi.

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

mais tout ce que j'ai est un #1064 - Syntax Error

Quelle est l'erreur dans ma requête et comment puis-je résoudre ce problème?

Merci d'avance

23
KhorneHoly

Votre requête devrait ressembler à ceci:

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

METTRE À JOUR 

Étant donné que cette réponse reçoit plus d'attention que prévu, je devrais développer cette réponse. Tout d’abord, la réponse elle-même n’est peut-être pas évidente, mais il n’est pas nécessaire que les colonnes portent le même nom. Donc, la suite suivra aussi (en supposant que les colonnes existent dans leurs tables respectives):

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

De plus, ils n'ont même pas besoin d'être de vraies colonnes dans la table. L'un des exemples de transformation de données que j'utilise souvent est:

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;

Donc, comme cela pourrait être plus évident maintenant, la règle est, tant que la requête SELECT renvoie le même nombre de colonnes que la requête INSERT, elle peut être utilisée à la place de VALUES.

67
Damir Kasipovic

Vous avez dit "Les noms des tables et des colonnes étaient différents", mais vous utilisiez toujours les mêmes noms. Essaye ça:

INSERT INTO newDatabase.newtable1 (newColumn1, newColumn2) 
SELECT oldcolumn1, oldcolumn2 FROM oldDatabase.oldtable1;
4
Racil Hilan
INSERT INTO db1.table SELECT * FROM db2.table;

Si vous souhaitez copier des données dans les mêmes tables de bases différentes.

1
Priyank Kotiyal
CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table 
SELECT column_name FROM db1.table
0
Mayuri