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

UPDATE MySQL: Cập nhật bản ghi có ID lớn nhất thỏa điều kiện

Cú pháp

UPDATE bang 
SET cot = gia_tri 
WHERE dieu_kien 
ORDER BY cot_id DESC 
LIMIT 1;

Ví dụ: Cập nhật UserStatus = 1 cho bản ghi UserRank=230 có UserId lớn nhất

Dữ liệu ban đầu

+--------+------------+----------+
| UserId | UserStatus | UserRank |
+--------+------------+----------+
| 1      | 1          | 78       |
| 2      | 0          | 118      |
| 3      | 1          | 223      |
| 4      | 1          | 225      |
| 5      | 0          | 227      |
| 6      | 0          | 230      |  -- UserId lớn nhất có Rank=230
+--------+------------+----------+

Truy vấn 1: Có điều kiện WHERE

mysql> UPDATE UpdateWithHighestDemo 
    -> SET UserStatus = 1 
    -> WHERE UserRank = 230 
    -> ORDER BY UserId DESC LIMIT 1;

Kết quả

+--------+------------+----------+
| UserId | UserStatus | UserRank |
+--------+------------+----------+
| 6      | 1          | 230      |  -- Đã cập nhật
+--------+------------+----------+

Truy vấn 2: Chỉ ORDER BY + LIMIT (cập nhật dòng cuối bảng)

mysql> UPDATE UpdateWithHighestDemo 
    -> SET UserStatus = 0 
    -> ORDER BY UserId DESC LIMIT 1;

Kết quả

+--------+------------+----------+
| UserId | UserStatus | UserRank |
+--------+------------+----------+
| 6      | 0          | 230      |  -- Dòng cuối bị cập nhật
+--------+------------+----------+

Lưu ý quan trọng

  • ORDER BY ... LIMIT trong UPDATE: Hỗ trợ từ MySQL 4.0+
  • Không dùng được trong UPDATE multi-table
  • Kết hợp WHERE + ORDER BY + LIMIT: WHERE lọc trước, ORDER BY sắp xếp kết quả lọc, LIMIT lấy N dòng đầu
  • Cần index trên cột ORDER BY để hiệu năng tốt

Ứng dụng: Xử lý hàng đợi (queue), lấy task mới nhất, cập nhật log gần nhất.