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

Cập nhật dòng có ID lớn nhất trong một truy vấn MySQL?

Giải pháp: ORDER BY ... DESC LIMIT 1 trong UPDATE

MySQL cho phép ORDER BY và LIMIT trong câu lệnh UPDATE.

Ví dụ minh họa

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (ID INT, GameScore INT);
mysql> INSERT INTO DemoTable VALUES(15, 848747), (13, 909049), (34, 98474646), (31, 948474);

Dữ liệu gốc

+------+-----------+
| ID   | GameScore |
+------+-----------+
| 15   | 848747    |
| 13   | 909049    |
| 34   | 98474646  |  <-- ID lớn nhất
| 31   | 948474    |
+------+-----------+

Truy vấn UPDATE

mysql> UPDATE DemoTable 
    -> SET GameScore = GameScore + 10 
    -> ORDER BY ID DESC 
    -> LIMIT 1;

Kết quả

+------+-----------+
| ID   | GameScore |
+------+-----------+
| 15   | 848747    |
| 13   | 909049    |
| 34   | 98474656  |  <-- Đã +10
| 31   | 948474    |
+------+-----------+

Giải thích

  • ORDER BY ID DESC: Sắp xếp ID giảm dần (lớn nhất lên đầu)
  • LIMIT 1: Chỉ cập nhật 1 dòng đầu tiên sau sắp xếp
  • Kết hợp: Cập nhật dòng có ID lớn nhất

Các biến thể

Mục tiêuCú pháp
ID nhỏ nhấtORDER BY ID ASC LIMIT 1
Score cao nhấtORDER BY GameScore DESC LIMIT 1
Score thấp nhấtORDER BY GameScore ASC LIMIT 1
Mới tạo gần nhất (AUTO_INCREMENT)ORDER BY ID DESC LIMIT 1

⚠️ Lưu ý quan trọng

  • Chỉ MySQL hỗ trợ ORDER BY/LIMIT trong UPDATE/DELETE (không chuẩn SQL)
  • Không dùng được trong Prepared Statement (một số phiên bản)
  • Replication: ORDER BY LIMIT có thể gây inconsistency giữa master-slave
  • An toàn hơn: Dùng subquery

Cách chuẩn SQL (Portable)

UPDATE DemoTable 
SET GameScore = GameScore + 10 
WHERE ID = (SELECT MAX(ID) FROM DemoTable);

So sánh

CáchƯu điểmNhược điểm
ORDER BY LIMIT1 query, nhanh, MySQL nativeNon-standard, replication risk
Subquery MAX()Chuẩn SQL, an toàn replication2 truy vấn (subquery + update)
JOIN subquery1 query, chuẩnPhức tạp hơn

Khuyến nghị: Ứng dụng nội bộ MySQL → dùng ORDER BY LIMIT. Library/Framework portable → dùng subquery.