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

MySQL में एकल INSERT VALUES से कॉमा-अलग करके एकाधिक पंक्तियां डालें

MySQL में एक ही INSERT स्टेटमेंट में VALUES क्लॉज में कॉमा से अलग करके कई पंक्तियां डाल सकते हैं। यह अलग-अलग INSERT स्टेटमेंट की तुलना में **काफी तेज़** है क्योंकि यह नेटवर्क राउंड-ट्रिप, पार्सिंग, और ट्रांजैक्शन ओवरहेड कम करता है।

सिंटैक्स

INSERT INTO table_name (col1, col2, col3)
VALUES 
    (val1_1, val1_2, val1_3),
    (val2_1, val2_2, val2_3),
    (val3_1, val3_2, val3_3),
    ...;

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

टेबल बनाएं (MyISAM, ऑटो-इंक्रीमेंट 1000 से):

mysql> CREATE TABLE IF NOT EXISTS DemoTable1343 (
    _ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName VARCHAR(40),
    ClientProjectDeadline DATE
) ENGINE=MyISAM, AUTO_INCREMENT=1000;

एकल क्वेरी में 4 पंक्तियां डालें

mysql> INSERT INTO DemoTable1343(ClientName, ClientProjectDeadline) 
    -> VALUES('Chris', '2019-09-24'), 
    -> ('Bob', '2015-12-09'), 
    -> ('Mike', '2017-01-20'), 
    -> ('Carol', '2018-03-31');
Query OK, 4 rows affected (0.10 sec)
Records: 4  Duplicates: 0  Warnings: 0

डेटा देखें:

mysql> SELECT * FROM DemoTable1343;
+-----------+------------+-----------------------+
| _ClientId | ClientName | ClientProjectDeadline |
+-----------+------------+-----------------------+
| 1000      | Chris      | 2019-09-24            |
| 1001      | Bob        | 2015-12-09            |
| 1002      | Mike       | 2017-01-20            |
| 1003      | Carol      | 2018-03-31            |
+-----------+------------+-----------------------+

प्रदर्शन लाभ

सीमाएं और सर्वोत्तम अभ्यास

पैकेट आकार सीमा

  • max_allowed_packet (डिफ़ॉल्ट 4MB/64MB) से बड़ा स्टेटमेंट विफल होगा
  • बड़े बैच के लिए: SET GLOBAL max_allowed_packet = 1073741824; (1GB)
  • व्यावहारिक: 1000-5000 पंक्तियों प्रति बैच

ऑटो-इंक्रीमेंट व्यवहार

  • लगातार मान आवंटित: 1000, 1001, 1002, 1003
  • LAST_INSERT_ID() पहली पंक्ति का ID लौटाता है (1000)
  • LAST_INSERT_ID() + n से अन्य ID प्राप्त करें

डुप्लिकेट कुंजी प्रबंधन

INSERT INTO table (id, col) VALUES (1,'a'), (2,'b')
ON DUPLICATE KEY UPDATE col = VALUES(col);

बैच प्रोसेसिंग पैटर्न (एप्लिकेशन कोड)

-- Python उदाहरण
batch = []
for row in data:
    batch.append(f"({row.id}, '{row.name}')")
    if len(batch) >= 1000:
        execute(f"INSERT INTO t (id, name) VALUES {','.join(batch)}")
        batch = []
if batch: execute(...)

संबंधित: INSERT INTO ... SELECT

दूसरी टेबल से कॉपी करने के लिए:

INSERT INTO target (col1, col2)
SELECT col1, col2 FROM source WHERE condition;

सारांश

  • VALUES (..), (..), (..) - एकल स्टेटमेंट, बहु-पंक्ति
  • नेटवर्क, पार्सिंग, ट्रांजैक्शन ओवरहेड नाटकीय रूप से कम
  • max_allowed_packet सीमा का ध्यान रखें
  • बड़े आयात के लिए LOAD DATA INFILE और भी तेज़
  • यह **बल्क इंसर्ट** का मानक MySQL तरीका है

थोक सम्मिलन के लिए हमेशा मल्टी-वैल्यू INSERT या LOAD DATA उपयोग करें।

  1. - MySQL में सभी कॉलम मानों को कॉमा से अलग करके एक ही पंक्ति में प्रदर्शित करें?

    इसके लिए GROUP_CONCAT() और CONCAT() का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1807 ( Id int ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1807 values(101); Query OK, 1 row affected

  1. - MySQL में IN() क्लॉज़ के साथ एक क्वेरी में रिकॉर्ड कैसे डिलीट करें?

    MySQL में एक ही क्वेरी में एकाधिक विशिष्ट रिकॉर्ड डिलीट करने के लिए, DELETE स्टेटमेंट के साथ IN() ऑपरेटर का उपयोग करें। यह एकाधिक DELETE स्टेटमेंट चलाने से अधिक कुशल और पठनीय है। उदाहरण: विशिष्ट StudentId वाले रिकॉर्ड डिलीट करना डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1922 ( StudentI

  1. - एकल MySQL क्वेरी में एक कॉलम में एकाधिक मान कैसे डालें?

    सिंटैक्स एक कॉलम में एकाधिक मान डालने के लिए, निम्नलिखित सिंटैक्स का उपयोग करें: INSERT INTO yourTableName VALUES (yourValue1), (yourValue2), ... (yourValueN); उदाहरण सबसे पहले एक टेबल बनाते हैं: ); अब INSERT कमांड का उपयोग करके रिकॉर्ड डालें: INSERT INTO DemoTable2022 VALUES (Computer Science)

© कॉपीराइट https://in.wsxdn.com सर्वाधिकार सुरक्षित
विधिराउंड-ट्रिपपार्सिंगट्रांजैक्शनसापेक्ष गति
अलग INSERT x NNN बारN बार (ऑटोकमिट)1x (बेसलाइन)
एकल INSERT multi-VALUES11 बार1 बार**10-100x तेज़**
LOAD DATA INFILE1स्ट्रीमिंग1 बारसबसे तेज़