MySQL вставляет из одной базы данных в другую

Мне нужно перенести данные из одной базы данных в другую, оба находятся в одной локальной системе.

Таблицы и столбцы получили разные имена, и я не должен переносить все столбцы из старой базы данных, поэтому

Select * не работает для меня.

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

но все, что я получил, это #1064 - Syntax Error

Какая ошибка в моем запросе и как я могу это исправить?

Заранее спасибо

Ответы

Ответ 1

Ваш запрос должен выглядеть следующим образом:

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.

Ответ 2

Вы сказали: "Таблицы и столбцы получили разные имена", но вы все равно использовали одни и те же имена. Попробуйте следующее:

INSERT INTO newDatabase.newtable1 (newColumn1, newColumn2) 
SELECT oldcolumn1, oldcolumn2 FROM oldDatabase.oldtable1;

Ответ 3

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

Ответ 4

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

Если вы хотите скопировать данные в те же таблицы разных db.