Sử dụng CASE WHEN ... THEN ... ELSE ... END trong mệnh đề SET của UPDATE để đổi giá trị có điều kiện mà không cần bảng trung gian.
Tạo bảng trạng thái user
mysql> CREATE TABLE DemoTable (
-> UserName VARCHAR(100),
-> UserStatus VARCHAR(100)
-> );
Query OK, 0 rows affected (0.74 sec)
mysql> INSERT INTO DemoTable VALUES('John', 'Active'), ('Chris', 'Inactive'), ('Bob', 'Inactive'), ('Robert', 'Active');
Query OK, 4 rows affected (0.29 sec)
Đảo ngược trạng thái: Active ↔ Inactive
mysql> UPDATE DemoTable
-> SET UserStatus = CASE UserStatus
-> WHEN 'Inactive' THEN 'Active'
-> ELSE 'Inactive'
-> END;
Query OK, 4 rows affected (0.28 sec)
Kết quả:
+----------+------------+ | UserName | UserStatus | +----------+------------+ | John | Inactive | | Chris | Active | | Bob | Active | | Robert | Inactive | +----------+------------+ 4 rows in set (0.00 sec)
Ưu điểm: Thực hiện trong một câu lệnh, atomic, không khóa bảng lâu, không cần bảng tạm.