Giới thiệu
Hàm IFNULL(expr1, expr2) trả về expr1 nếu không phải NULL, ngược lại trả về expr2. Kết hợp với UPDATE để thay thế NULL bằng giá trị mặc định (0 trong ví dụ) mà không ảnh hưởng giá trị đã có.
Ví dụ thực hành
1. Tạo bảng DemoTable817
mysql> CREATE TABLE DemoTable817 (Value INT);
2. Chèn dữ liệu có NULL
mysql> INSERT INTO DemoTable817 VALUES (10),(NULL),(20),(NULL);
3. Cập nhật: NULL → 0, giữ nguyên giá trị khác
mysql> UPDATE DemoTable817 SET Value = IFNULL(Value, 0);
4. Kết quả
+-------+
| Value |
+-------+
| 10 |
| 0 |
| 20 |
| 0 |
+-------+
So sánh IFNULL, COALESCE, CASE
| Hàm | Cú pháp | Đặc điểm |
|---|---|---|
IFNULL | IFNULL(col, 0) | Chỉ 2 đối số, MySQL-only |
COALESCE | COALESCE(col, 0) | Chuẩn SQL, nhiều đối số: COALESCE(a,b,c,0) |
CASE | CASE WHEN col IS NULL THEN 0 ELSE col END | Linh hoạt nhất, chuẩn SQL |
Cách thay thế khi SELECT (không sửa dữ liệu)
SELECT Id, IFNULL(Value, 0) AS Value FROM DemoTable817;
-- Hoặc
SELECT Id, COALESCE(Value, 0) AS Value FROM DemoTable817;
Lưu ý
UPDATE ... SET col = IFNULL(col, 0)chỉ cập nhật hàng có NULL (MySQL tối ưu: không ghi đè giá trị giống nhau).- Kết quả
Rows matched: 4 Changed: 2xác nhận chỉ 2 hàng NULL bị thay đổi. - Nên đặt
DEFAULT 0cho cột khi tạo bảng để tránh NULL ở bản ghi mới:Value INT DEFAULT 0.