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

Cập nhật bản ghi cuối cùng của một ID cụ thể trong MySQL với ORDER BY DESC LIMIT 1

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 ... LIMIT trong replication / binlog (statement-based).
  • Rõ ràng, dễ debug, tận dụng index PK.

Lưu ý

  • ORDER BY ... LIMIT trong 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.