अलग-अलग संरचना वाली टेबल्स के बीच डेटा स्थानांतरित करना
MySQL में INSERT INTO SELECT स्टेटमेंट का उपयोग करके आप एक टेबल से दूसरी टेबल में डेटा कॉपी कर सकते हैं, भले ही उनकी संरचना अलग हो। कॉलम नाम और क्रम मिलान करने की आवश्यकता है, लेकिन टेबल परिभाषाएं भिन्न हो सकती हैं।
स्रोत टेबल बनाना (DemoTable1)
mysql> CREATE TABLE DemoTable1 (
-> PersonId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> PersonName VARCHAR(20),
-> PersonAge INT,
-> PersonCountryName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.55 sec)
स्रोत टेबल में डेटा डालना
mysql> INSERT INTO DemoTable1(PersonName,PersonAge,PersonCountryName) VALUES ('Chris Brown',24,'US');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable1(PersonName,PersonAge,PersonCountryName) VALUES ('John Doe',26,'UK');
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO DemoTable1(PersonName,PersonAge,PersonCountryName) VALUES ('David Miller',23,'AUS');
Query OK, 1 row affected (0.10 sec)
स्रोत टेबल के रिकॉर्ड्स
mysql> SELECT * FROM DemoTable1;
+----------+--------------+-----------+-------------------+
| PersonId | PersonName | PersonAge | PersonCountryName |
+----------+--------------+-----------+-------------------+
| 1 | Chris Brown | 24 | US |
| 2 | John Doe | 26 | UK |
| 3 | David Miller | 23 | AUS |
+----------+--------------+-----------+-------------------+
3 rows in set (0.00 sec)
लक्ष्य टेबल बनाना (DemoTable2) - अलग संरचना
mysql> CREATE TABLE DemoTable2 (
-> EmployeeId INT,
-> EmployeeFullName VARCHAR(30),
-> EmployeeAge INT,
-> EmployeeCountryName VARCHAR(20),
-> EmployeeSalary INT DEFAULT 20000
-> );
Query OK, 0 rows affected (0.52 sec)
महत्वपूर्ण अंतर
- कॉलम नाम अलग हैं (PersonId → EmployeeId, PersonName → EmployeeFullName, आदि)
- लक्ष्य टेबल में एक अतिरिक्त कॉलम है (EmployeeSalary) जिसका डिफ़ॉल्ट मान है
- डेटा प्रकार संगत हैं लेकिन समान नहीं हैं (VARCHAR लंबाई अलग)
डेटा स्थानांतरित करने का क्वेरी
mysql> INSERT INTO DemoTable2(EmployeeId,EmployeeFullName,EmployeeAge,EmployeeCountryName)
-> SELECT PersonId,PersonName,PersonAge,PersonCountryName FROM DemoTable1;
Query OK, 3 rows affected (0.26 sec)
Records: 3 Duplicates: 0 Warnings: 0
लक्ष्य टेबल के परिणाम
mysql> SELECT * FROM DemoTable2;
+------------+------------------+-------------+---------------------+----------------+
| EmployeeId | EmployeeFullName | EmployeeAge | EmployeeCountryName | EmployeeSalary |
+------------+------------------+-------------+---------------------+----------------+
| 1 | Chris Brown | 24 | US | 20000 |
| 2 | John Doe | 26 | UK | 20000 |
| 3 | David Miller | 23 | AUS | 20000 |
+------------+------------------+-------------+---------------------+----------------+
3 rows in set (0.00 sec)
मुख्य बिंदु
- कॉलम सूची में क्रम SELECT कथन के कॉलम क्रम से मेल खाना चाहिए
- लक्ष्य टेबल में अतिरिक्त कॉलम्स के डिफ़ॉल्ट मान होने चाहिए या NULL स्वीकार करना चाहिए
- डेटा प्रकार संगत होने चाहिए (INT से INT, VARCHAR से VARCHAR)
- AUTO_INCREMENT कॉलम को स्पष्ट रूप से मान प्रदान करके ओवरराइड किया जा सकता है
सर्वोत्तम अभ्यास
- कॉलम नामों को स्पष्ट रूप से सूचीबद्ध करें (SELECT * से बचें)
- डेटा प्रकार संगतता सत्यापित करें
- बड़े डेटासेट के लिए बैच प्रोसेसिंग पर विचार करें
- लेनदेन (ट्रांजैक्शन) का उपयोग करें यदि एटॉमिसिटी आवश्यक है