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

MySQL में एक साथ कई रो इन्सर्ट करना

मल्टी-रो 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 स्टेटमेंट्स की तुलना में बहुत तेज (कम नेटवर्क राउंड-ट्रिप्स, कम पार्सिंग)
  • एटॉमिसिटी: सभी रो एक ही ट्रांजैक्शन में इन्सर्ट होते हैं (डिफ़ॉल्ट ऑटोकमिट के साथ)
  • संक्षिप्तता: कम कोड, कम त्रुटि संभावना

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

  1. बैच आकार: 1000-5000 रो प्रति स्टेटमेंट (पैकेट आकार सीमा `max_allowed_packet` ध्यान में रखें)
  2. इंडेक्स अक्षम करें: बल्क लोड से पहले `ALTER TABLE ... DISABLE KEYS` (केवल MyISAM), बाद में `ENABLE KEYS`
  3. ट्रांजैक्शन: स्पष्ट ट्रांजैक्शन का उपयोग करें:
    START TRANSACTION;
    INSERT ... VALUES (...), (...), ...; -- कई बैच
    COMMIT;
  4. 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);
  1. - MySQL INSERT INTO SELECT: दूसरी टेबल से एक साथ कई पंक्तियाँ डालें

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1(Name varchar(100)); Query OK, 0 rows affected (0.55 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1 values(Chris); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1 val

  1. - क्या MySQL में ऑटो_इन्क्रीमेंट मान निर्दिष्ट किए बिना रिकॉर्ड डाल सकते हैं?

    हाँ, बिल्कुल। MySQL में AUTO_INCREMENT कॉलम के लिए मान निर्दिष्ट करना वैकल्पिक है। जब आप INSERT स्टेटमेंट में उस कॉलम को छोड़ देते हैं या NULL/0 पास करते हैं, तो MySQL स्वचालित रूप से अगला अनुक्रमिक मान जनरेट करता है। सिंटैक्स विकल्प -- विकल्प 1: कॉलम सूची में ऑटो_इन्क्रीमेंट कॉलम को छोड़ दें INSER

  1. - MySQL टेबल में JSON डेटा कैसे डालें?

    MySQL 5.7+ में नेटिव JSON डेटा प्रकार है जो JSON दस्तावेज़ों को मान्य, संग्रहीत और क्वेरी करने की अनुमति देता है। JSON कॉलम वाली टेबल बनाएं mysql> CREATE TABLE DemoTable1832 ( ListOfNames JSON ); JSON सरणी डालें mysql> INSERT INTO DemoTable1832(ListOfNames) VALUES([Sam, Mike, Carol]); my