ฉันยังใหม่กับ MySQL ฉันต้องการคัดลอกเนื้อหาของตารางหนึ่งไปยังอีกตารางหนึ่งในฐานข้อมูลเดียวกัน โดยพื้นฐานแล้วฉันต้องการแทรกลงในตารางจากตารางอื่น มีวิธีง่ายๆในการทำเช่นนี้หรือไม่?
ฉันยังใหม่กับ MySQL ฉันต้องการคัดลอกเนื้อหาของตารางหนึ่งไปยังอีกตารางหนึ่งในฐานข้อมูลเดียวกัน โดยพื้นฐานแล้วฉันต้องการแทรกลงในตารางจากตารางอื่น มีวิธีง่ายๆในการทำเช่นนี้หรือไม่?
คำตอบ:
INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;
แก้ไข: หรือถ้าตารางมีโครงสร้างที่แตกต่างกันคุณสามารถ:
INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;
แก้ไข: เพื่อ จำกัด สิ่งนี้ ..
INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1
หากไม่มีตารางคุณสามารถสร้างตารางที่มีสคีมาเดียวกันดังนี้:
CREATE TABLE table2 LIKE table1;
จากนั้นในการคัดลอกข้อมูล:
INSERT INTO table2 SELECT * FROM table1
SELECT ... INTO
หมายถึงการส่งออกตารางไปยังไฟล์เอาต์พุตหรือไปยังตัวแปร ไม่ได้ลงในตารางโดยตรง ดูdev.mysql.com/doc/refman/5.7/en/select-into.html
หาก table1 มีขนาดใหญ่และคุณไม่ต้องการล็อกไว้ในช่วงเวลาของกระบวนการคัดลอกคุณสามารถทำการถ่ายโอนข้อมูลและโหลดแทนได้:
CREATE TABLE table2 LIKE table1;
SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;
show processlist
ฉันไม่เห็นการสืบค้นใด ๆ กำลังทำงานอยู่ ไม่แน่ใจว่าเป็นปัญหาอะไร
สิ่งนี้ได้ผลสำหรับฉัน
CREATE TABLE newtable LIKE oldtable;
จำลองตารางใหม่ด้วยตารางเก่า
INSERT newtable SELECT * FROM oldtable
;
คัดลอกข้อมูลแถวทั้งหมดไปยังตารางใหม่
ขอบคุณ
หากคุณต้องการสร้างและคัดลอกเนื้อหาในช็อตเดียวให้ใช้ SELECT:
สร้างตาราง new_tbl SELECT * จาก orig_tbl;
สิ่งนี้ได้ผลสำหรับฉัน คุณสามารถทำให้คำสั่ง SELECT ซับซ้อนขึ้นได้โดยใช้คำสั่ง WHERE และ LIMIT
ขั้นแรกให้ทำซ้ำตารางขนาดใหญ่ของคุณ (โดยไม่มีข้อมูล) เรียกใช้แบบสอบถามต่อไปนี้แล้วตัดทอนตารางที่ใหญ่กว่า
INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)
ง่ายสุด ๆ :-)
CREATE TABLE target_table SELECT * FROM source_table;
เพียงแค่สร้างตารางใหม่ที่มีโครงสร้างเดียวกันกับตารางต้นทางและคัดลอกแถวทั้งหมดจาก source_table ลงใน target_table
CREATE TABLE target_table SELECT * FROM source_table WHERE condition;
หากคุณต้องการคัดลอกบางแถวไปยัง target_table ให้ใช้เงื่อนไขภายในโดยที่ อนุประโยค
ลองทำตามนี้ ทำงานได้ดีใน Oracle 10g ของฉัน
CREATE TABLE new_table
AS (SELECT * FROM old_table);