Giới thiệu
MySQL cho phép mệnh đề ORDER BY và LIMIT trong câu lệnh UPDATE. Kết hợp ORDER BY Id DESC LIMIT 1 để cập nhật chính xác bản ghi mới nhất (ID lớn nhất) của một nhóm.
Ví dụ thực hành
1. Tạo bảng DemoTable824
mysql> CREATE TABLE DemoTable824 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(100),
ClientAge INT
);
2. Chèn dữ liệu
mysql> INSERT INTO DemoTable824(ClientName,ClientAge) VALUES
('Chris',23),('Robert',26),('Bob',24),('David',27);
3. Cập nhật bản ghi cuối cùng (Id=4) thành 'Adam', 28
mysql> UPDATE DemoTable824
SET ClientName = 'Adam', ClientAge = 28
ORDER BY Id DESC LIMIT 1;
4. Kết quả
+----+------------+-----------+
| Id | ClientName | ClientAge |
+----+------------+-----------+
| 1 | Chris | 23 |
| 2 | Robert | 26 |
| 3 | Bob | 24 |
| 4 | Adam | 28 | -- đã cập nhật
+----+------------+-----------+
Ứng dụng thực tế
- Cập nhật trạng thái đơn hàng mới nhất của khách hàng.
- Ghi đè cấu hình mới nhất (version control đơn giản).
- Đánh dấu log mới nhất là 'processed'.
Cách an toàn hơn (khuyên dùng)
-- Xác định ID trước, rồi UPDATE bằng PK
SELECT Id FROM DemoTable824 ORDER BY Id DESC LIMIT 1 INTO @last_id;
UPDATE DemoTable824 SET ClientName='Adam', ClientAge=28 WHERE Id = @last_id;
- Tránh hành vi ngẫu nhiên của
UPDATE ... ORDER BY ... LIMITtrong replication / binlog (statement-based). - Rõ ràng, dễ debug, tận dụng index PK.
Lưu ý
ORDER BY ... LIMITtrong UPDATE chỉ hỗ trợ MySQL (không chuẩn SQL).- Không dùng được với JOIN.
- Luôn test trên môi trường dev trước khi chạy production.