Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में INSERT INTO SELECT से दूसरी टेबल के डेटा से मान डालें

MySQL में INSERT INTO ... SELECT स्टेटमेंट का उपयोग करके एक टेबल से डेटा चुनकर दूसरी टेबल में डाल सकते हैं। यह डेटा माइग्रेशन, आर्काइविंग, रिपोर्टिंग टेबल भरने, और ETL प्रक्रियाओं के लिए मूलभूत तकनीक है।

सिंटैक्स

INSERT INTO target_table (col1, col2, col3)
SELECT col1, col2, col3 FROM source_table
WHERE condition;

व्यावहारिक उदाहरण

स्रोत टेबल बनाएं:

mysql> CREATE TABLE DemoTable1 (
    Id INT,
    Name VARCHAR(20),
    Age INT
);

डेटा डालें:

mysql> INSERT INTO DemoTable1 VALUES(100, 'Chris', 24);
mysql> INSERT INTO DemoTable1 VALUES(101, 'Adam', 23);
mysql> INSERT INTO DemoTable1 VALUES(102, 'John', 25);
mysql> INSERT INTO DemoTable1 VALUES(103, 'Carol', 26);

लक्ष्य टेबल बनाएं (अलग कॉलम नाम):

mysql> CREATE TABLE DemoTable2 (
    EmployeeId INT,
    EmployeeFirstName VARCHAR(20),
    EmployeeAge INT
);

शर्त के साथ डेटा कॉपी करें (Id = 101)

mysql> INSERT INTO DemoTable2(EmployeeId, EmployeeFirstName, EmployeeAge)
    -> SELECT Id, Name, Age FROM DemoTable1 WHERE Id = 101;
Query OK, 1 row affected (0.17 sec)
Records: 1  Duplicates: 0  Warnings: 0

लक्ष्य टेबल जांचें:

mysql> SELECT * FROM DemoTable2;
+------------+-------------------+-------------+
| EmployeeId | EmployeeFirstName | EmployeeAge |
+------------+-------------------+-------------+
| 101        | Adam              | 23          |
+------------+-------------------+-------------+

मुख्य बिंदु

  • कॉलम क्रम मेल खाना चाहिए: INSERT कॉलम सूची और SELECT कॉलम सूची क्रम और संख्या में मेल खानी चाहिए
  • डेटा प्रकार संगत होने चाहिए (अंतर्निहित रूपांतरण होता है)
  • WHERE क्लॉज वैकल्पिक - छोड़ने पर सभी पंक्तियां कॉपी होती हैं
  • ऑटो-इंक्रीमेंट: लक्ष्य टेबल में ऑटो-इंक्रीमेंट कॉलम है तो उसे INSERT सूची से बाहर रखें

सभी पंक्तियां कॉपी करें

INSERT INTO DemoTable2(EmployeeId, EmployeeFirstName, EmployeeAge)
SELECT Id, Name, Age FROM DemoTable1;

कॉलम नाम समान हों तो

INSERT INTO DemoTable2 SELECT * FROM DemoTable1;

व्यंजक/गणना के साथ चयन

INSERT INTO summary_table (category, total_sales, avg_price)
SELECT category, SUM(amount), AVG(price)
FROM sales
GROUP BY category;

एकाधिक टेबल से डेटा (JOIN)

INSERT INTO employee_details (emp_id, emp_name, dept_name)
SELECT e.id, e.name, d.name
FROM employees e
JOIN departments d ON e.dept_id = d.id;

प्रदर्शन युक्तियाँ

  • बड़े डेटासेट के लिए INSERT ... SELECT एकल ट्रांजैक्शन में चलता है - लॉग आकार बढ़ सकता है
  • बैच में विभाजित करें: WHERE id BETWEEN ... AND ...
  • लक्ष्य टेबल पर इंडेक्स अस्थायी रूप से अक्षम करें: ALTER TABLE target DISABLE KEYS (MyISAM) या बाद में पुनर्निर्माण
  • REPLACE INTO ... SELECT या INSERT ... ON DUPLICATE KEY UPDATE अपसर्ट के लिए

सावधानी

INSERT INTO ... SELECT स्रोत टेबल पर **शेयर्ड लॉक** ले सकता है (इंजन/आइसोलेशन लेवल पर निर्भर)। उच्च-समवर्ती प्रणालियों में ध्यान दें।

यह स्टेटमेंट MySQL में डेटा परिवर्तन और टेबल-टू-टेबल कॉपी का मुख्य उपकरण है।

  1. - MySQL में LPAD और INSERT INTO SELECT का उपयोग करके अग्रणी शून्य के साथ मान डालें

    MySQL में अग्रणी शून्य के साथ क्रमिक ID उत्पन्न करना LPAD() फ़ंक्शन और INSERT INTO SELECT का उपयोग करके आप एक कॉलम में अग्रणी शून्य के साथ स्वरूपित मान (जैसे 001, 002, 003) स्वचालित रूप से उत्पन्न और डाल सकते हैं। टेबल बनाना ); Query OK, 0 rows affected (0.00 sec) LPAD के साथ INSERT INTO SELECT क

  1. - MySQL में INSERT INTO SELECT से दूसरी टेबल के मान लेकर नई टेबल भरें

    सिंटैक्स insert into targetTable(col1, col2) select sourceCol1, sourceCol2 from sourceTable where condition; उदाहरण insert into demo83(id,username) select id,name from demo82 where id=101; परिणाम +------+----------+ | id | username | +------+----------+ | 101 | Bob | | 101 | David |

  1. - MySQL में एक टेबल से दूसरी टेबल में डेटा सम्मिलित करना

    परिचय MySQL में INSERT INTO ... SELECT स्टेटमेंट का उपयोग करके एक टेबल से डेटा चुनकर दूसरी टेबल में सम्मिलित किया जा सकता है। पहली टेबल निर्माण और डेटा select * from DemoTable1; +------+-----------+ | Id | FirstName | +------+-----------+ | 101 | Adam | | 102 | John | +------+-------