ใน MySQL สามารถเพิ่มข้อมูลหลายแถวในคำสั่ง INSERT เดียวได้ โดยระบุชุดค่า (Value sets) คั่นด้วยจุลภาค ภายในวงเล็บเดียวกัน
รูปแบบคำสั่ง
INSERT INTO table (col1, col2) VALUES (val1, val2), (val3, val4), (val5, val6);
ตัวอย่างการใช้งาน
สร้างตารางพร้อม AUTO_INCREMENT เริ่มที่ 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;
Insert 4 แถวในคำสั่งเดียว:
mysql> insert into DemoTable1343(ClientName,ClientProjectDeadline)
-> values('Chris','2019-09-24'),('Bob','2015-12-09'),('Mike','2017-01-20'),('Carol','2018-03-31');
ผลลัพธ์ (Id เริ่มที่ 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 หลายคำสั่งมาก (Single round-trip, Single transaction)
- ข้อจำกัด:
max_allowed_packetจำกัดขนาดคำสั่ง (Default ~4MB/64MB) - Error handling: หากแถวไหน Error ทั้งชุดจะ Rollback (ถ้าใช้ Transactional Engine เช่น InnoDB)
INSERT IGNOREหรือON DUPLICATE KEY UPDATEใช้ได้กับรูปแบบนี้เช่นกัน