2014-04-07 16 views
15

Ho bisogno di migrare i dati da un database a un altro, entrambi si trovano sullo stesso sistema locale.Inserisci MySQL da un database in un altro

Le tabelle e le colonne avuto nomi diversi e non devono migrare tutte le colonne dal vecchio database, in modo da

Select * non funziona per me.

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

ma tutto quello che ho ottenuto è un #1064 - Syntax Error

Qual è l'errore nel mio Query e come posso risolvere questo problema?

Grazie in anticipo

+0

Forse hai bisogno di uno spazio dopo il nome della tabella, poco prima ( – marcosh

+0

La sintassi di MySQL SELECT è errata. Suppongo che tu non abbia letto il manuale (https://dev.mysql.com/doc/refman/ 5.0/it/select.html)? –

risposta

44

Vostri criteri dovrebbe andare in questo modo:

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

UPDATE

Dal momento che questa risposta è sempre più attenzione che ho anche anticipato, mi dovrebbero ampliare su questa risposta . Prima di tutto, potrebbe non essere ovvio dalla risposta stessa, ma le colonne non hanno bisogno di avere lo stesso nome. Così, a seguito lavorerà troppo (assumendo che le colonne esistono nelle rispettive tabelle):

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

Inoltre, essi non hanno nemmeno bisogno di essere veri colonne della tabella. Uno degli esempi per la trasformazione dei dati che uso molto spesso è:

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; 

Così, come potrebbe essere più evidente ora, la regola è, a patto che la query SELECT restituisce stesso numero di colonne che inseriscono le esigenze di query , può essere utilizzato al posto di VALORI.

+0

Ha funzionato, grazie :) – KhorneHoly

3

Hai detto "Le tabelle e le colonne hanno nomi diversi", ma hai comunque utilizzato gli stessi nomi. Prova questo:

INSERT INTO newDatabase.newtable1 (newColumn1, newColumn2) 
SELECT oldcolumn1, oldcolumn2 FROM oldDatabase.oldtable1; 
0
CREATE TABLE db2.table LIKE db1.table; 
INSERT INTO db2.table 
SELECT column_name FROM db1.table 
0
INSERT INTO db1.table SELECT * FROM db2.table; 

Se si desidera copiare i dati stessi tavoli di diversa db.

Problemi correlati