मल्टी-रो INSERT सिंटैक्स
MySQL एक ही INSERT स्टेटमेंट में कई मान सेट्स की अनुमति देता है, जिससे बल्क इन्सर्ट तेज और कुशल होता है।
सिंटैक्स
INSERT INTO table_name (col1, col2, ...) VALUES (val1, val2, ...), (val1, val2, ...), ...;
उदाहरण: टेबल बनाना
mysql> CREATE TABLE DemoTable811(
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(100),
StudentAge INT
);
Query OK, 0 rows affected (0.54 sec)
एक ही क्वेरी में 5 रो इन्सर्ट करना
mysql> INSERT INTO DemoTable811(StudentName,StudentAge) VALUES
('Chris',21),('Robert',22),('David',20),('Bob',19),('Carol',23);
Query OK, 5 rows affected (0.14 sec)
Records: 5 Duplicates: 0 Warnings: 0
परिणाम देखना
mysql> SELECT * FROM DemoTable811;
+-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | Robert | 22 | | 3 | David | 20 | | 4 | Bob | 19 | | 5 | Carol | 23 | +-----------+-------------+------------+ 5 rows in set (0.00 sec)
लाभ
- प्रदर्शन: अलग-अलग INSERT स्टेटमेंट्स की तुलना में बहुत तेज (कम नेटवर्क राउंड-ट्रिप्स, कम पार्सिंग)
- एटॉमिसिटी: सभी रो एक ही ट्रांजैक्शन में इन्सर्ट होते हैं (डिफ़ॉल्ट ऑटोकमिट के साथ)
- संक्षिप्तता: कम कोड, कम त्रुटि संभावना
बड़े बल्क इन्सर्ट के लिए टिप्स
- बैच आकार: 1000-5000 रो प्रति स्टेटमेंट (पैकेट आकार सीमा `max_allowed_packet` ध्यान में रखें)
- इंडेक्स अक्षम करें: बल्क लोड से पहले `ALTER TABLE ... DISABLE KEYS` (केवल MyISAM), बाद में `ENABLE KEYS`
- ट्रांजैक्शन: स्पष्ट ट्रांजैक्शन का उपयोग करें:
START TRANSACTION; INSERT ... VALUES (...), (...), ...; -- कई बैच COMMIT;
LOAD DATA INFILEसबसे तेज है (CSV/TSV फाइलों के लिए)
INSERT IGNORE और ON DUPLICATE KEY UPDATE
डुप्लिकेट अनदेखा करना
INSERT IGNORE INTO DemoTable811(StudentName,StudentAge) VALUES
('Chris',21),('NewStudent',25); -- 'Chris' डुप्लिकेट होने पर एरर नहीं
डुप्लिकेट पर अपडेट करना
INSERT INTO DemoTable811(StudentName,StudentAge) VALUES
('Chris',99)
ON DUPLICATE KEY UPDATE StudentAge = VALUES(StudentAge);
मान बिना कॉलम नाम के इन्सर्ट करना
सभी कॉलम्स के लिए क्रम में मान दें (ऑटो-इन्क्रीमेंट के लिए NULL/DEFAULT):
INSERT INTO DemoTable811 VALUES (NULL, 'Alice', 22);