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

Cập nhật bảng có ID trùng lặp trong MySQL với ORDER BY LIMIT

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 ... LIMIT trong 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