Khi bảng không có khóa chính và có ID trùng, dùng ORDER BY ... DESC LIMIT 1 trong UPDATE để chỉ cập nhật một hàng cụ thể (hàng cuối theo thứ tự sắp xếp).
Tạo bảng không có PRIMARY KEY
mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(100)); Query OK, 0 rows affected (0.61 sec)
mysql> INSERT INTO DemoTable VALUES(1, 'John'), (2, 'Chris'), (2, 'Robert'), (2, 'David'); Query OK, 4 rows affected (0.41 sec)
Cập nhật chỉ 1 hàng trong 3 hàng Id=2 (hàng cuối theo Id DESC)
mysql> UPDATE DemoTable SET Name = 'Adam Smith' WHERE Id = 2 ORDER BY Id DESC LIMIT 1; Query OK, 1 row affected (0.28 sec)
Kết quả (hàng David bị đổi, Chris và Robert giữ nguyên):
+------+------------+ | Id | Name | +------+------------+ | 1 | John | | 2 | Adam Smith | | 2 | Robert | | 2 | David | +------+------------+ 4 rows in set (0.00 sec)
Lưu ý:
ORDER BY ... LIMITtrong UPDATE là tính năng MySQL riêng (không chuẩn SQL)- Không xác định được hàng nào bị cập nhật nếu không có ORDER BY
- Thiết kế tốt: luôn có PRIMARY KEY duy nhất