दूसरी Table से Insert
Tables के बीच rows copy करना
अक्सर आपको एक table से दूसरी में rows copy करनी होती हैं — पुराना data archive करना, records हटाना, या summary table बनाना। MySQL का INSERT INTO ... SELECT यह एक statement में करता है, filter और transform करने को SELECT की पूरी ताक़त के साथ।
INSERT INTO ... SELECT
INSERT INTO archive (id, name) SELECT id, name FROM users;
SELECT users से rows पढ़ता है, और INSERT उन्हें archive में डालता है। कोई values हाथ से type नहीं होतीं — data सीधे source table से आता है।
सिर्फ़ कुछ rows copy
INSERT INTO archive (id, name) SELECT id, name FROM users WHERE active = 0;
सिर्फ़ मेल खाती rows copy करने को SELECT में WHERE जोड़िए। यहाँ सिर्फ़ inactive users archive होते हैं। जो भी filter आप SELECT में लिख सकें यहाँ चलता है।
विशिष्ट columns copy
INSERT INTO summary (customer, total) SELECT customer_id, SUM(amount) FROM orders GROUP BY customer_id;
SELECT विशिष्ट columns चुन सकता है और aggregate भी कर सकता है। यहाँ हम प्रति customer कुल खर्च की summary table बनाते हैं। Selected columns target columns से क्रम और type में मेल खाने चाहिए।
Copy करते समय बदलना
INSERT INTO products_new (id, name, price) SELECT id, UPPER(name), price * 1.1 FROM products;
चूँकि यह पूरा SELECT है, आप copy करते समय data बदल सकते हैं — यहाँ names uppercase बनते हैं और prices 10% बढ़ते हैं। यह migrations और cleanups को सुविधाजनक है।
Query से table बनाना
CREATE TABLE archive AS SELECT * FROM users WHERE active = 0;
CREATE TABLE ... AS SELECT एक नई table बनाकर उसे query से एक step में भरता है। ध्यान दीजिए यह data और column types copy करता है, पर primary keys, indexes या constraints नहीं — ज़रूरत हो तो वे बाद में जोड़िए।
आम गलतियाँ
- बेमेल columns। Selected columns target list से क्रम और type में मेल खाने चाहिए।
- WHERE भूलना। इसके बिना, सारी rows copy होती हैं।
- CREATE TABLE AS से keys की उम्मीद। यह data copy करता है, keys या indexes नहीं।
- Duplicate-key errors। मौजूदा keys वाली table में copy करना टकरा सकता है — IGNORE या filter इस्तेमाल कीजिए।
सारांश
- INSERT INTO ... SELECT एक table से दूसरी में rows copy करता है।
- सिर्फ़ मेल खाती rows copy करने को WHERE जोड़िए।
- विशिष्ट columns या aggregates select कीजिए; वे target से मेल खाने चाहिए।
- Copy करते समय expressions से data बदलिए।
- CREATE TABLE ... AS SELECT नई table बनाकर भरता है (keys नहीं)।
आगे, कई rows जोड़िए inserting multiple rows में, या summarise कीजिए GROUP BY और HAVING से।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
MySQL में एक table से दूसरी में rows कैसे copy करूँ?
INSERT INTO archive (id, name) SELECT id, name FROM users WHERE active = 0;। यह SELECT से rows पढ़कर उन्हें target table में एक statement में insert करता है।दूसरी table में सिर्फ़ कुछ rows कैसे copy करूँ?
क्या सिर्फ़ विशिष्ट columns copy कर सकता हूँ?
INSERT INTO t2 (a, b) SELECT x, y FROM t1;। Selected columns की संख्या और types target columns से मेल खाने चाहिए।Query से नई table कैसे बनाऊँ?
CREATE TABLE archive AS SELECT * FROM users WHERE active = 0;। यह नई table बनाकर उसे query results से एक step में भरता है, हालाँकि यह keys और indexes copy नहीं करता।क्या copy करते समय data बदल सकता हूँ?
SELECT id, UPPER(name), price * 1.1 FROM products names uppercase में और prices 10% बढ़ाकर copy करता है।