Cập nhật hàng loạt (bulk update) một cột trong MySQL
Sử dụng câu lệnh UPDATE không có mệnh đề WHERE để thay đổi tất cả các hàng, hoặc có WHERE để lọc một tập con.
Ví dụ: Đặt tất cả isEducated = true
Tạo bảng:
mysql> CREATE TABLE BulkChangeDemo (
-> CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerName VARCHAR(20),
-> isEducated BOOLEAN
-> );
Chèn dữ liệu mẫu:
mysql> INSERT INTO BulkChangeDemo(CustomerName, isEducated) VALUES
('Larry', true), ('John', false), ('Carol', false),
('Mike', true), ('David', false), ('Bob', false);
Dữ liệu ban đầu:
+------------+--------------+------------+ | CustomerId | CustomerName | isEducated | +------------+--------------+------------+ | 1 | Larry | 1 | | 2 | John | 0 | | 3 | Carol | 0 | | 4 | Mike | 1 | | 5 | David | 0 | | 6 | Bob | 0 | +------------+--------------+------------+
Cập nhật tất cả thành true:
mysql> UPDATE BulkChangeDemo SET isEducated = true; Query OK, 4 rows affected (0.18 sec) Rows matched: 6 Changed: 4 Warnings: 0
Kết quả: 4 hàng thay đổi (2 hàng đã là true không đổi)
Các trường hợp thường gặp
- Cập nhật tất cả:
UPDATE table SET col = value; - Cập nhật có điều kiện:
UPDATE table SET col = value WHERE condition; - Cập nhật dựa trên cột khác:
UPDATE table SET col1 = col2 * 1.1; - Cập nhật từ bảng khác:
UPDATE t1 JOIN t2 ON t1.id = t2.id SET t1.col = t2.col;
Lưu ý an toàn
- Luôn test với SELECT trước:
SELECT * FROM table WHERE condition; - Backup dữ liệu trước khi chạy UPDATE hàng loạt
- Sử dụng transaction nếu cần rollback:
START TRANSACTION; UPDATE ...; COMMIT; - Chạy ở giờ ít tải cho bảng lớn để tránh lock