Cập nhật có điều kiện phức hợp
Sử dụng toán tử logic AND trong mệnh đề SET hoặc WHERE của câu lệnh UPDATE.
Ví dụ
Tạo bảng:
CREATE TABLE DemoTable613 (
Id INT,
Age INT,
isMarried TINYINT(1)
);
INSERT INTO DemoTable613 VALUES
(100, 29, 0),
(200, 22, 0),
(300, 30, 1);
Cập nhật isMarried = TRUE chỉ khi Age = 29 AND Id = 100:
UPDATE DemoTable613
SET isMarried = (Age = 29 AND Id = 100);
Kết quả:
+------+------+-----------+
| Id | Age | isMarried |
+------+------+-----------+
| 100 | 29 | 1 |
| 200 | 22 | 0 |
| 300 | 30 | 0 |
+------+------+-----------+
Giải thích
- Biểu thức
(Age = 29 AND Id = 100)trả về boolean (1 = TRUE, 0 = FALSE). - MySQL cho phép gán trực tiếp boolean vào cột numeric (TINYINT).
- Tất cả các dòng đều được evaluate, nhưng chỉ dòng thỏa mãn 2 điều kiện mới nhận giá trị 1.
Cách viết thay thế (cổ điển)
UPDATE DemoTable613
SET isMarried = 1
WHERE Age = 29 AND Id = 100;
-- Các dòng khác giữ nguyên (hoặc set 0 nếu cần)
UPDATE DemoTable613
SET isMarried = 0
WHERE NOT (Age = 29 AND Id = 100);
So sánh
| Cách | Ưu điểm | Nhược điểm |
|---|---|---|
| SET = (condition) | 1 câu lệnh, atomic, ngắn gọn | Khó đọc với logic phức tạp |
| WHERE condition | Rõ ràng, chuẩn SQL, dễ debug | Cần 2 câu lệnh nếu muốn set cả TRUE và FALSE |
| CASE WHEN | Linh hoạt nhiều nhánh | Verbose |
Lưu ý
- Luôn test với
SELECTtrước khiUPDATE. - Sử dụng transaction cho batch update quan trọng.
- Index trên cột trong WHERE để tăng tốc.