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

MySQL में एक साथ कई पंक्तियाँ INSERT कैसे करें? (बैच इंसर्ट)

MySQL में एक ही INSERT स्टेटमेंट में कई पंक्तियाँ डालने (बैच इंसर्ट) के लिए VALUES सूची को कॉमा से अलग करके लिखें। यह अलग-अलग INSERT से **काफी तेज़** होता है।

सिंटैक्स

INSERT INTO yourTableName (column1, column2, ...) 
VALUES 
    (val1_1, val1_2, ...),
    (val2_1, val2_2, ...),
    (val3_1, val3_2, ...),
    ...;

उदाहरण के साथ समझें

टेबल बनाएं:

CREATE TABLE addMultipleValues (
    Counter INT NOT NULL
);

बैच इंसर्ट (10 पंक्तियाँ एक साथ)

INSERT INTO addMultipleValues (Counter) 
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);

परिणाम: Query OK, 10 rows affected (0.27 sec) Records: 10 Duplicates: 0 Warnings: 0

सत्यापित करें

SELECT * FROM addMultipleValues;

आउटपुट:

+---------+
| Counter |
+---------+
| 1       |
| 2       |
| 3       |
| 4       |
| 5       |
| 6       |
| 7       |
| 8       |
| 9       |
| 10      |
+---------+

क्यों बैच इंसर्ट तेज़ है?

तरीकानेटवर्क राउंड ट्रिपपार्स/ऑप्टिमाइज़ट्रांजैक्शन ओवरहेड
10 अलग INSERT1010 बार10 बार (ऑटोकमिट)
1 बैच INSERT11 बार1 बार

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

1. बैच आकार सीमित करें

-- 1000-5000 पंक्तियाँ प्रति बैच (पैकेट आकार सीमा: max_allowed_packet)
INSERT INTO table (col) VALUES (...), (...), ...;  -- ~1MB प्रति बैच

2. ट्रांजैक्शन में लपेटें

START TRANSACTION;
INSERT INTO table (col) VALUES (...), (...), ...;  -- बैच 1
INSERT INTO table (col) VALUES (...), (...), ...;  -- बैच 2
COMMIT;

3. ऑटोकमिट बंद करें (यदि मैनुअल)

SET autocommit = 0;
INSERT ...;  -- कई बैच
COMMIT;

4. LOAD DATA INFILE (सबसे तेज़ - CSV/TSV के लिए)

LOAD DATA INFILE 'data.csv' 
INTO TABLE yourTable 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

ON DUPLICATE KEY UPDATE के साथ

INSERT INTO users (id, name, email) 
VALUES (1, 'John', 'john@example.com'),
       (2, 'Jane', 'jane@example.com')
ON DUPLICATE KEY UPDATE 
    name = VALUES(name), 
    email = VALUES(email);

INSERT IGNORE के साथ

INSERT IGNORE INTO users (id, email) 
VALUES (1, 'a@b.com'), (2, 'c@d.com');
-- डुप्लिकेट की पर त्रुटि नहीं, चुपचाप छोड़ देता है

REPLACE INTO (डिलीट + इंसर्ट)

REPLACE INTO users (id, name) VALUES (1, 'New Name');
-- प्राइमरी/यूनिक की मौजूद होने पर हटाकर नया डालता है

नोट

  • एक स्टेटमेंट में अधिकतम पंक्तियाँ: max_allowed_packet द्वारा सीमित (डिफॉल्ट 64MB)
  • बहुत बड़ा बैच मेमोरी/लॉक समस्या पैदा कर सकता है
  • विदेशी कुंजी जांच: SET FOREIGN_KEY_CHECKS = 0 से तेज़ (सावधानी से)
  • यूनिक कंस्ट्रेंट उल्लंघन पर पूरा बैच विफल होता है (IGNORE/ON DUPLICATE KEY के बिना)
  1. - MySQL में समय अंतर निकालें: NOW() और INTERVAL के साथ

    MySQL में NOW() और INTERVAL का उपयोग करके वर्तमान समय से निर्दिष्ट अवधि पहले/बाद के रिकॉर्ड ढूंढ सकते हैं। उदाहरण: पिछले 5 घंटे में आगमन समय 1. टेबल बनाएं CREATE TABLE DemoTable1570 (ArrivalTime DATETIME); 2. डेटा डालें INSERT INTO DemoTable1570 VALUES(2019-10-15 16:10:00); 3. वर्तमान समय मान

  1. - MySQL में एकल INSERT से एकाधिक रिकॉर्ड तेजी से डालें

    बल्क इंसर्ट सिंटैक्स से प्रदर्शन सुधारें एक ही INSERT स्टेटमेंट में कई मान सेट अल्पविराम से अलग करके डालें। सिंटैक्स: insert into yourTableName values(val1,val2,...),(val1,val2,...),...; उदाहरण: mysql> create table DemoTable2007 ( Amount1 int, Amount2 int, Amount3 int ); Query OK, 0 rows affected

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

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