Giới thiệu
MySQL cho phép chèn nhiều hàng trong một câu lệnh INSERT đơn giản bằng cách liệt kê nhiều bộ giá trị, cách nhau bằng dấu phẩy. Cách này nhanh hơn đáng kể so với chạy nhiều INSERT riêng lẻ.
Cú pháp
INSERT INTO ten_bang (cot1, cot2, ...) VALUES
(val1_1, val1_2, ...),
(val2_1, val2_2, ...),
...
(valN_1, valN_2, ...);
Ví dụ thực hành
1. Tạo bảng DemoTable811
mysql> CREATE TABLE DemoTable811 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(100),
StudentAge INT
);
2. Chèn 5 hàng một lần
mysql> INSERT INTO DemoTable811(StudentName,StudentAge) VALUES
('Chris',21),('Robert',22),('David',20),('Bob',19),('Carol',23);
3. Kết quả
+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 1 | Chris | 21 |
| 2 | Robert | 22 |
| 3 | David | 20 |
| 4 | Bob | 19 |
| 5 | Carol | 23 |
+-----------+-------------+------------+
Lợi ích hiệu suất
- Giảm round-trip network (một lần giao tiếp thay vì N lần).
- Giảm overhead parsing, optimization, locking.
- Thường nhanh gấp 5-10 lần so với INSERT riêng lẻ trong loop ứng dụng.
Lưu ý
- Giới hạn kích thước gói tin:
max_allowed_packet(mặc định 4MB/64MB). Chèn quá nhiều hàng cùng lúc có thể vượt quá. - Sử dụng
INSERT IGNOREhoặcON DUPLICATE KEY UPDATEnếu cần xử lý trùng khóa. - Với dữ liệu rất lớn (hàng triệu hàng), cân nhắc
LOAD DATA INFILEhoặc chia batch (ví dụ 1000-5000 hàng/lần). - Cột
AUTO_INCREMENTsẽ tự động gán giá trị cho từng hàng.