MySQL में एकल INSERT VALUES से कॉमा-अलग करके एकाधिक पंक्तियां डालें
MySQL में एक ही INSERT स्टेटमेंट में VALUES क्लॉज में कॉमा से अलग करके कई पंक्तियां डाल सकते हैं। यह अलग-अलग INSERT स्टेटमेंट की तुलना में **काफी तेज़** है क्योंकि यह नेटवर्क राउंड-ट्रिप, पार्सिंग, और ट्रांजैक्शन ओवरहेड कम करता है।
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;
+-----------+------------+-----------------------+
| _ClientId | ClientName | ClientProjectDeadline |
+-----------+------------+-----------------------+
| 1000 | Chris | 2019-09-24 |
| 1001 | Bob | 2015-12-09 |
| 1002 | Mike | 2017-01-20 |
| 1003 | Carol | 2018-03-31 |
+-----------+------------+-----------------------+
प्रदर्शन लाभ
विधि
राउंड-ट्रिप
पार्सिंग
ट्रांजैक्शन
सापेक्ष गति
अलग INSERT x N
N
N बार
N बार (ऑटोकमिट)
1x (बेसलाइन)
एकल INSERT multi-VALUES
1
1 बार
1 बार
**10-100x तेज़**
LOAD DATA INFILE
1
स्ट्रीमिंग
1 बार
सबसे तेज़
सीमाएं और सर्वोत्तम अभ्यास
पैकेट आकार सीमा
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;
इसके लिए 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
MySQL में एक ही क्वेरी में एकाधिक विशिष्ट रिकॉर्ड डिलीट करने के लिए, DELETE स्टेटमेंट के साथ IN() ऑपरेटर का उपयोग करें। यह एकाधिक DELETE स्टेटमेंट चलाने से अधिक कुशल और पठनीय है।
उदाहरण: विशिष्ट StudentId वाले रिकॉर्ड डिलीट करना
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1922 (
StudentI
सिंटैक्स
एक कॉलम में एकाधिक मान डालने के लिए, निम्नलिखित सिंटैक्स का उपयोग करें:
INSERT INTO yourTableName VALUES (yourValue1), (yourValue2), ... (yourValueN);
उदाहरण
सबसे पहले एक टेबल बनाते हैं:
);
अब INSERT कमांड का उपयोग करके रिकॉर्ड डालें:
INSERT INTO DemoTable2022 VALUES
(Computer Science)