UPDATE nhiều cột cùng lúc cho một bản ghi trong MySQL
Câu lệnh UPDATE có thể gán giá trị cho nhiều cột trong một câu lệnh, lọc bằng WHERE.
Tạo bảng và dữ liệu
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Marks1 int, Marks2 int, Marks3 int
);
Query OK, 0 rows affected (0.60 sec)
mysql> insert into DemoTable(Marks1,Marks2,Marks3) values(45,67,34); mysql> insert into DemoTable(Marks1,Marks2,Marks3) values(89,87,56); mysql> insert into DemoTable(Marks1,Marks2,Marks3) values(87,56,54);
Dữ liệu ban đầu
+----+--------+--------+--------+ | Id | Marks1 | Marks2 | Marks3 | +----+--------+--------+--------+ | 1 | 45 | 67 | 34 | | 2 | 89 | 87 | 56 | | 3 | 87 | 56 | 54 | +----+--------+--------+--------+
Cập nhật 3 cột cho Id=1
mysql> update DemoTable
-> set Marks1=98, Marks2=96, Marks3=99
-> where Id=1;
Query OK, 1 row affected (0.18 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Kết quả
+----+--------+--------+--------+ | Id | Marks1 | Marks2 | Marks3 | +----+--------+--------+--------+ | 1 | 98 | 96 | 99 | | 2 | 89 | 87 | 56 | | 3 | 87 | 56 | 54 | +----+--------+--------+--------+
Tiêu đề gốc "Update multiple records" (nhiều bản ghi) nhưng ví dụ chỉ update 1 bản ghi.
Để update NHIỀU BẢN GHI khác nhau giá trị: MySQL không hỗ trợ UPDATE nhiều hàng với giá trị khác nhau trong 1 câu lệnh đơn giản. Cần dùng:
- Nhiều câu UPDATE riêng biệt
CASEtrong SET:UPDATE ... SET Marks1 = CASE Id WHEN 1 THEN 98 WHEN 2 THEN 95 END ...- Bảng tạm / derived table JOIN
- Stored Procedure lặp
Ví dụ CASE UPDATE nhiều hàng:
UPDATE DemoTable
SET Marks1 = CASE Id WHEN 1 THEN 98 WHEN 2 THEN 95 WHEN 3 THEN 90 END,
Marks2 = CASE Id WHEN 1 THEN 96 WHEN 2 THEN 94 WHEN 3 THEN 92 END
WHERE Id IN (1,2,3);