Cập nhật có điều kiện trong MySQL với hàm IF()
Hàm IF() trong MySQL cho phép cập nhật giá trị dựa trên điều kiện ngay trong câu lệnh UPDATE, tránh phải dùng CASE WHEN phức tạp.
Cú pháp
UPDATE yourTableName SET yourColumnName = IF(yourColumnName = yourOldValue, yourNewValue, yourColumnName);
Ví dụ: Cập nhật tuổi từ 23 thành 26
Tạo bảng:
mysql> CREATE TABLE updateIfConditionDemo (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName VARCHAR(20),
-> UserAge INT
-> );
Chèn dữ liệu:
mysql> INSERT INTO updateIfConditionDemo(UserName, UserAge) VALUES
('Larry', 23), ('Mike', 21), ('Sam', 23), ('David', 23), ('Maxwell', 23);
Dữ liệu ban đầu:
+--------+----------+---------+ | UserId | UserName | UserAge | +--------+----------+---------+ | 1 | Larry | 23 | | 2 | Mike | 21 | | 3 | Sam | 23 | | 4 | David | 23 | | 5 | Maxwell | 23 | +--------+----------+---------+
Cập nhật: Nếu UserAge = 23 thì đổi thành 26, giữ nguyên nếu khác:
mysql> UPDATE updateIfConditionDemo SET UserAge = IF(UserAge = 23, 26, UserAge); Query OK, 4 rows affected (0.20 sec)
Kết quả sau cập nhật:
+--------+----------+---------+ | UserId | UserName | UserAge | +--------+----------+---------+ | 1 | Larry | 26 | | 2 | Mike | 21 | | 3 | Sam | 26 | | 4 | David | 26 | | 5 | Maxwell | 26 | +--------+----------+---------+
Các biến thể hữu ích
- Nhiều điều kiện: Lồng IF() hoặc dùng CASE WHEN
- Cập nhật nhiều cột: SET col1 = IF(...), col2 = IF(...)
- Kết hợp WHERE: UPDATE ... SET ... WHERE condition để giới hạn phạm vi
Lưu ý hiệu năng
Hàm IF() được tối ưu tốt trong MySQL, nhưng với bảng lớn nên có WHERE để giảm số dòng quét.