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

MySQL में INSERT INTO SELECT और UNION के साथ एकाधिक इन्सर्ट कैसे करें?

MySQL में एक ही स्टेटमेंट में एकाधिक पंक्तियाँ इन्सर्ट करने के लिए, INSERT INTO ... SELECT के साथ UNION ALL (या UNION) का उपयोग करें। यह अलग-अलग INSERT स्टेटमेंट से अधिक कुशल है।

सिंटैक्स

INSERT INTO table_name (col1, col2, col3)
SELECT val1, val2, val3
UNION ALL
SELECT val4, val5, val6
UNION ALL
SELECT val7, val8, val9; -- आदि

उदाहरण: 3 छात्र रिकॉर्ड एक साथ इन्सर्ट करना

डेमो टेबल बनाएं:

mysql> CREATE TABLE DemoTable1936 (
    StudentId INT,
    StudentName VARCHAR(20),
    StudentCountryName VARCHAR(20)
);

UNION ALL के साथ एक क्वेरी में इन्सर्ट करें:

mysql> INSERT INTO DemoTable1936 (StudentId, StudentName, StudentCountryName)
SELECT 1001 AS StudentId, 'Chris' AS StudentName, 'US' AS StudentCountryName
UNION ALL
SELECT 1002, 'Robert', 'UK'
UNION ALL
SELECT 1003, 'David', 'AUS';

आउटपुट: Query OK, 3 rows affected

परिणाम:

+-----------+-------------+--------------------+
| StudentId | StudentName | StudentCountryName |
+-----------+-------------+--------------------+
| 1001      | Chris       | US                 |
| 1002      | Robert      | UK                 |
| 1003      | David       | AUS                |
+-----------+-------------+--------------------+

UNION vs UNION ALL

ऑपरेटरव्यवहारप्रदर्शन
UNIONडुप्लिकेट हटाता हैधीमा (सॉर्ट/यूनिक चेक)
UNION ALLसभी पंक्तियाँ रखता हैतेज़ (कोई डुप्लिकेट चेक नहीं)

सिफारिश: इन्सर्ट के लिए लगभग हमेशा UNION ALL उपयोग करें जब तक डुप्लिकेट हटाना आवश्यक न हो।

VALUES() सिंटैक्स विकल्प (MySQL 8.0.19+)

INSERT INTO DemoTable1936 (StudentId, StudentName, StudentCountryName)
VALUES 
    (1001, 'Chris', 'US'),
    (1002, 'Robert', 'UK'),
    (1003, 'David', 'AUS');

यह अधिक पठनीय और मानक SQL है।

बड़े बैच इन्सर्ट के लिए टिप्स

  • बैच आकार: 100-1000 पंक्तियों प्रति स्टेटमेंट बैच करें
  • ट्रांजैक्शन: ऑटोकमिट बंद करें, बैच के बाद कमिट करें
  • इंडेक्स: बल्क इन्सर्ट के दौरान नॉन-यूनिक इंडेक्स अक्षम करें, बाद में पुनर्निर्माण
  • LOAD DATA INFILE: बहुत बड़े डेटासेट (CSV) के लिए सबसे तेज़

सबक्वेरी से इन्सर्ट

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

UNION ALL के साथ INSERT INTO SELECT छोटे-मध्यम बैच इन्सर्ट के लिए उत्कृष्ट है, विशेष रूप से जब मान डायनामिक हों या अलग स्रोतों से आ रहे हों।

  1. - डेटाबेस टेबल से कुछ डेटा चुनें और उसी डेटाबेस में दूसरी टेबल में इन्सर्ट करें MySQL में

    एक टेबल से दूसरी टेबल में डेटा इन्सर्ट करने के लिए INSERT INTO स्टेटमेंट का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1 ( Id int, FirstName varchar(20), Age int ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें:

  1. - MySQL में AUTO_INCREMENT टेबल में INSERT INTO SELECT कैसे करें?

    MySQL में AUTO_INCREMENT प्राइमरी की वाली टेबल में INSERT INTO ... SELECT का उपयोग करते समय, आप स्पष्ट रूप से ID मान प्रदान कर सकते हैं या ऑटो-जनरेट होने दे सकते हैं। दोनों दृष्टिकोण वैध हैं लेकिन अलग व्यवहार करते हैं। उदाहरण: स्पष्ट ID के साथ 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 क