MySQL में, एक ही डेटाबेस के भीतर एक टेबल की सामग्री को दूसरे टेबल पर कॉपी कैसे करें?


118

मैं MySQL के लिए नया हूं। मैं एक ही डेटाबेस के भीतर एक तालिका की सामग्री को दूसरी तालिका में कॉपी करना चाहूंगा। मूल रूप से, मैं एक तालिका से दूसरी तालिका में सम्मिलित करना चाहूंगा। क्या ऐसा करने का आसान तरीका है?

जवाबों:


184

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

यदि कोई इस क्वेरी को चलाने के दौरान स्रोत तालिका में सम्मिलित ऑपरेशन करना चाहता है तो क्या होगा? यह ऑपरेशन सम्मिलित करता है या नहीं?
लावाकुश कुर्मी

135

यदि तालिका मौजूद नहीं है, तो आप उसी के साथ स्कीमा बना सकते हैं:

CREATE TABLE table2 LIKE table1;

फिर, डेटा को कॉपी करने के लिए:

INSERT INTO table2 SELECT * FROM table1

1
मुझे यह कोड w3schoolSELECT * INTO newTable FROM sourceTable में मिला , यह काम क्यों नहीं कर रहा हैMySQL
कसून सियामबलपिटिया

@KasunSiyambalapitiya SELECT ... INTOएक आउटपुट फ़ाइल या चर के लिए एक तालिका निर्यात करने के लिए है; सीधे एक मेज में नहीं। देखें dev.mysql.com/doc/refman/5.7/en/select-into.html
डॉक्टर जे

@ Kasun Siyambalapitiya कि w3school पेज एक अलग SQL के लिए है, MySQL के लिए अभिप्रेत नहीं है। w3schools में अब त्रुटि रिपोर्टिंग है, यदि आपको समस्या के बारे में सटीक जानकारी प्राप्त करने के लिए उनकी साइट पर रिपोर्ट मिलती है।
नाइटवॉल्फ

27

यदि तालिका 1 बड़ी है और आप इसे कॉपी प्रक्रिया की अवधि के लिए लॉक नहीं करना चाहते हैं, तो आप इसके बजाय डंप-एंड-लोड कर सकते हैं:

CREATE TABLE table2 LIKE table1;

SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;

मैंने stackoverflow.com/a/9536680/351903 समाधान का उपयोग करके एक RDS पर डंपिंग की कोशिश की । फ़ाइल बन गई लेकिन यह लंबे समय तक 0 आकार की रही। इसके अलावा, जाँच करने पर show processlist, मैं कोई भी क्वेरी नहीं देख सकता था। निश्चित नहीं है कि मुद्दा क्या है।
संदीपन नाथ

15

इसने मेरे लिए काम किया,

CREATE TABLE newtable LIKE oldtable;

पुरानी तालिका के साथ नए विकल्प को दर्शाता है

INSERT newtable SELECT * FROM oldtable;

सभी पंक्ति डेटा को नई तालिका में कॉपी करता है।

धन्यवाद


10

यदि आप किसी एकल शॉट में सामग्री बनाना और उसकी प्रतिलिपि बनाना चाहते हैं, तो बस चयन करें:

TATE new_tbl का चयन करें * orig_tbl से;


4
+1 - हालाँकि नई तालिका में पहले से इंडेक्स परिभाषाएँ नहीं होंगी। "Create ... like ..." दृष्टिकोण इंडेक्स परिभाषाओं को भी कॉपी करेगा।
मार्टिन

2

इसने मेरे लिए काम किया। आप WHECT और LIMIT क्लॉस के साथ सेलेक्ट स्टेटमेंट को और अधिक जटिल बना सकते हैं।

पहले अपनी बड़ी तालिका (डेटा के बिना) की नकल करें, निम्न क्वेरी चलाएँ, और फिर बड़ी तालिका को काटें।

INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)

सुपर सिंपल है। :-)


0
CREATE TABLE target_table SELECT * FROM source_table;

यह सिर्फ स्रोत तालिका के समान संरचना के साथ एक नई तालिका बनाता है और source_table से target_table में सभी पंक्तियों की प्रतिलिपि भी बनाता है।

CREATE TABLE target_table SELECT * FROM source_table WHERE condition;

यदि आपको target_table में कॉपी की जाने वाली कुछ पंक्तियों की आवश्यकता है, तो एक शर्त लागू करें जहां क्लॉज़ अंदर हो


-3

इसे इस्तेमाल करे। मेरे Oracle 10g में अच्छी तरह से काम करता है,

CREATE TABLE new_table
  AS (SELECT * FROM old_table);

8
लेकिन सवाल MySQL के बारे में है।
सलमान एक

इसने इसके लिए + दिया, क्योंकि यह MySQL के साथ भी काम करता है। dev.mysql.com/doc/refman/5.7/en/create-table-select.html
डैनियल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.