Câu trả lời:
INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;
CHỈNH SỬA: hoặc nếu các bảng có cấu trúc khác nhau, bạn cũng có thể:
INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;
CHỈNH SỬA: để hạn chế điều này ..
INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1
Nếu bảng không tồn tại, bạn có thể tạo một bảng với cùng một lược đồ như sau:
CREATE TABLE table2 LIKE table1;
Sau đó, để sao chép dữ liệu qua:
INSERT INTO table2 SELECT * FROM table1
SELECT * INTO newTable FROM sourceTable
trong w3school , tại sao nó không được làm việc trongMySQL
SELECT ... INTO
có nghĩa là xuất một bảng sang tệp đầu ra hoặc thành các biến; không trực tiếp vào một bảng. Xem dev.mysql.com/doc/refman/5.7/en/select-into.html
Nếu table1 lớn và bạn không muốn khóa nó trong suốt quá trình sao chép, bạn có thể thực hiện kết xuất và tải thay thế:
CREATE TABLE table2 LIKE table1;
SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;
show processlist
, tôi không thể thấy bất kỳ truy vấn nào đang chạy. Không chắc chắn vấn đề là gì.
Nếu bạn muốn tạo và sao chép nội dung trong một lần chụp, chỉ cần sử dụng CHỌN:
TẠO BẢNG new_tbl CHỌN * TỪ orig_tbl;
Điều này đã làm việc cho tôi. Bạn có thể làm cho câu lệnh SELECT phức tạp hơn, với mệnh đề WHERE và LIMIT.
Trước tiên, sao chép bảng lớn của bạn (không có dữ liệu), chạy truy vấn sau, sau đó cắt bớt bảng lớn hơn.
INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)
Siêu đơn giản. :-)
CREATE TABLE target_table SELECT * FROM source_table;
Nó chỉ tạo một bảng mới với cấu trúc giống như bảng nguồn và cũng sao chép tất cả các hàng từ source_table vào target_table.
CREATE TABLE target_table SELECT * FROM source_table WHERE condition;
Nếu bạn cần sao chép một số hàng vào target_table, thì hãy áp dụng một điều kiện bên trong mệnh đề where
Thử cái này. Hoạt động tốt trong Oracle 10g của tôi,
CREATE TABLE new_table
AS (SELECT * FROM old_table);