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

Cập nhật cột với số thứ tự tăng dần theo thứ tự sắp xếp trong MySQL

Kỹ thuật: Biến người dùng + ORDER BY trong UPDATE

SET @seq = 0;
UPDATE bang 
SET cot_so_thu_tu = (@seq := @seq + 1) 
ORDER BY cot_sap_xep ASC;

Ví dụ: Cập nhật OrderAmount theo thứ tự OrderCountryName

Dữ liệu ban đầu

+------+------------------+-------------+
| Id   | OrderCountryName | OrderAmount |
+------+------------------+-------------+
| 10   | US               | NULL        |
| 20   | UK               | NULL        |
| 30   | AUS              | NULL        |
| 40   | France           | NULL        |
+------+------------------+-------------+

Thực thi

mysql> SET @sequenceNumber = 0;
mysql> UPDATE updateColumnDemo 
    -> SET OrderAmount = (@sequenceNumber := @sequenceNumber + 1) 
    -> ORDER BY OrderAmount ASC;  -- Lưu ý: ORDER BY cột đang NULL, MySQL dùng thứ tự vật lý

Kết quả

+------+------------------+-------------+
| Id   | OrderCountryName | OrderAmount |
+------+------------------+-------------+
| 10   | US               | 1           |
| 20   | UK               | 2           |
| 30   | AUS              | 3           |
| 40   | France           | 4           |
+------+------------------+-------------+

Lưu ý quan trọng

  • ORDER BY trong UPDATE chỉ hỗ trợ từ MySQL 8.0+
  • Biến @seq phải khởi tạo trước (SET @seq = 0)
  • Thứ tự cập nhật phụ thuộc vào ORDER BY, không phải Id
  • Để đánh số theo cột khác: ORDER BY OrderCountryName

Ứng dụng: Tạo STT hiển thị

SET @stt = 0;
SELECT @stt := @stt + 1 AS STT, ten_cot FROM bang ORDER BY ten_cot;

Cảnh báo: Không dùng kỹ thuật này trong subquery hoặc JOIN phức tạp - hành vi không đảm bảo.