Vấn đề: INSERT nhiều hàng với giá trị tĩnh trong một câu lệnh
Cần chèn 3 hàng dữ liệu cố định vào bảng một cách hiệu quả.
Giải pháp: INSERT INTO ... SELECT ... UNION ALL
Kết hợp SELECT ... UNION ALL SELECT ... tạo tập dữ liệu ảo, sau đó INSERT INTO.
1. Tạo bảng
CREATE TABLE DemoTable (
StudentId INT,
StudentName VARCHAR(20),
StudentCountryName VARCHAR(20)
);
2. Chèn 3 hàng với UNION ALL
INSERT INTO DemoTable (StudentId, StudentName, StudentCountryName)
SELECT 1001 AS StudentId, 'Chris' AS StudentName, 'US' AS StudentCountryName
UNION ALL
SELECT 1002, 'Robert', 'UK'
UNION ALL
SELECT 1003, 'David', 'AUS';
3. Kết quả
+-----------+-------------+--------------------+
| StudentId | StudentName | StudentCountryName |
+-----------+-------------+--------------------+
| 1001 | Chris | US |
| 1002 | Robert | UK |
| 1003 | David | AUS |
+-----------+-------------+--------------------+
Tại sao dùng UNION ALL thay vì UNION?
UNIONloại bỏ trùng lặp (tốn chi phí sort/unique).UNION ALLgiữ tất cả hàng, nhanh hơn – phù hợp khi dữ liệu chèn không trùng.
Cách khác: VALUES() (MySQL 8.0.19+)
INSERT INTO DemoTable (StudentId, StudentName, StudentCountryName) VALUES
(1001, 'Chris', 'US'),
(1002, 'Robert', 'UK'),
(1003, 'David', 'AUS');
Cú pháp VALUES nhiều hàng ngắn gọn, dễ đọc, hiệu suất tốt – khuyên dùng cho phiên bản mới.
Ứng dụng
- Khởi tạo dữ liệu tham chiếu (lookup data).
- Script migration/seed database.
- Chèn hàng mẫu cho test.