2014-04-07 25 views
15

Tôi cần di chuyển dữ liệu từ Cơ sở dữ liệu này sang Cơ sở dữ liệu khác, cả hai đều trên cùng một hệ thống cục bộ.MySQL Chèn vào từ một Cơ sở dữ liệu khác

Các bảng và các cột có tên gọi khác nhau và tôi không phải di chuyển tất cả các cột từ cơ sở dữ liệu cũ, vì vậy

Select * không làm việc cho tôi.

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

nhưng tất cả tôi đã nhận là một #1064 - Syntax Error

lỗi trong Query của tôi là gì và như thế nào tôi có thể sửa lỗi này?

Cảm ơn trước

+0

có thể bạn cần một khoảng trống sau tên bảng, ngay trước đó ( – marcosh

+0

Cú pháp SELECT MySQL của bạn là sai. Tôi đoán bạn chưa đọc hướng dẫn sử dụng (https://dev.mysql.com/doc/refman/ 5.0/vi/select.html)? –

Trả lời

44

truy vấn của bạn nên đi như thế này:

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

CẬP NHẬT

Kể từ khi câu trả lời này là nhận được sự chú ý nhiều hơn tôi thậm chí dự đoán, tôi nên mở rộng về câu trả lời này . Trước hết, nó có thể không được rõ ràng từ câu trả lời chính nó, nhưng các cột không cần phải có cùng tên. Vì vậy, sau đây sẽ làm việc quá (giả định rằng các cột tồn tại trong bảng tương ứng của họ):

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

Bên cạnh đó, họ thậm chí không cần phải cột thật trong bảng. Một trong những ví dụ cho chuyển dữ liệu mà tôi sử dụng khá thường xuyên là:

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; 

Vì vậy, vì nó có thể là rõ ràng hơn bây giờ, nguyên tắc, miễn là truy vấn SELECT trả về cùng một số cột rằng INSERT nhu cầu truy vấn , nó có thể được sử dụng thay cho VALUES.

+0

Nó hoạt động, cảm ơn :) – KhorneHoly

3

Bạn đã nói "Các bảng và cột có tên khác nhau", nhưng bạn vẫn sử dụng cùng tên. Hãy thử điều này:

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; 

Nếu bạn muốn sao chép dữ liệu vào cùng một bảng db khác nhau.

Các vấn đề liên quan