Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách UPDATE MySQL với điều kiện IF


Cú pháp IF trong UPDATE

Sử dụng hàm IF(condition, true_value, false_value) trong mệnh đề SET:

UPDATE ten_bang 
SET cot1 = IF(dieu_kien, gia_tri_true, gia_tri_false), 
    cot2 = IF(dieu_kien_khac, gia_tri_true, gia_tri_false) 
WHERE dieu_kien_loc;

Ví dụ: Cập nhật BookName và BookId có điều kiện

1. Tạo bảng

mysql> CREATE TABLE UpdateWithIfCondition ( 
-> BookId INT, 
-> BookName VARCHAR(200) 
-> ); 
Query OK, 0 rows affected (0.60 sec)

2. Chèn dữ liệu

mysql> INSERT INTO UpdateWithIfCondition VALUES(1000,'C in Depth'); 
Query OK, 1 row affected (0.12 sec) 
mysql> INSERT INTO UpdateWithIfCondition VALUES(1001,'Introduction to Java'); 
Query OK, 1 row affected (0.14 sec)

3. Dữ liệu gốc

mysql> SELECT * FROM UpdateWithIfCondition;
+--------+----------------------+ 
| BookId | BookName             | 
+--------+----------------------+ 
| 1000   | C in Depth           | 
| 1001   | Introduction to Java | 
+--------+----------------------+ 
2 rows in set (0.00 sec)

4. UPDATE với IF (cập nhật 2 cột cùng lúc)

mysql> UPDATE UpdateWithIfCondition 
-> SET BookName = IF(BookName = 'C in Depth', 'Introduction to C', BookName), 
-> BookId = IF(BookId = 1001, 2000, BookId); 
Query OK, 2 rows affected (0.43 sec) 
Rows matched: 2 Changed: 2 Warnings: 0

5. Kết quả

mysql> SELECT * FROM UpdateWithIfCondition;
+--------+----------------------+ 
| BookId | BookName             | 
+--------+----------------------+ 
| 1000   | Introduction to C    | 
| 2000   | Introduction to Java | 
+--------+----------------------+ 
2 rows in set (0.00 sec)

CASE WHEN - Mạnh mẽ hơn IF

Hỗ trợ nhiều điều kiện, chuẩn ANSI SQL:

UPDATE ten_bang 
SET ten_cot = CASE 
    WHEN dieu_kien_1 THEN gia_tri_1 
    WHEN dieu_kien_2 THEN gia_tri_2 
    WHEN dieu_kien_3 THEN gia_tri_3 
    ELSE gia_tri_mac_dinh 
END;

Ví dụ CASE WHEN

UPDATE products 
SET price_category = CASE 
    WHEN price < 100 THEN 'Rẻ' 
    WHEN price < 500 THEN 'Trung bình' 
    WHEN price < 1000 THEN 'Đắt' 
    ELSE 'Sang trọng' 
END;

So sánh IF vs CASE

Đặc điểmIF()CASE WHEN
Số điều kiện1 (true/false)Nhiều (WHEN...WHEN...ELSE)
Độ phức tạpĐơn giảnPhức tạp
Chuẩn SQLMySQL extensionANSI SQL
Đọc/ghiNgắn gọnRõ ràng, dễ bảo trì
Lồng nhauKhó đọcDễ lồng (CASE trong CASE)

Lưu ý

  • IF() là hàm, CASE là biểu thức
  • IFNULL() ≠ IF() - IFNULL chỉ 2 tham số, kiểm tra NULL
  • WHERE clause vẫn cần để giới hạn hàng bị ảnh hưởng
  • Test trước với SELECT để kiểm tra logic

Test logic trước khi UPDATE

SELECT 
    BookId, BookName,
    IF(BookName = 'C in Depth', 'Introduction to C', BookName) AS new_name,
    IF(BookId = 1001, 2000, BookId) AS new_id
FROM UpdateWithIfCondition;