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 BYtrong UPDATE chỉ hỗ trợ từ MySQL 8.0+- Biến
@seqphả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.