Dùng biến phiên để cập nhật cột thành dãy số liên tiếp 1,2,3... theo thứ tự hàng vật lý (không đảm bảo thứ tự logic nếu không có ORDER BY).
Cú pháp
SET @stt = 0;
UPDATE ten_bang SET ten_cot = @stt := @stt + 1;
Ví dụ minh họa
Tạo bảng SequentialNumberDemo với dữ liệu lộn xộn:
CREATE TABLE SequentialNumberDemo (SequentialNumber INT NOT NULL);
INSERT INTO SequentialNumberDemo VALUES (100),(10),(9),(60),(50),(40);
Dữ liệu gốc: 100, 10, 9, 60, 50, 40
Cập nhật thành dãy 1..6
SET @seq = 0;
UPDATE SequentialNumberDemo SET SequentialNumber = @seq := @seq + 1;
Kết quả:
+------------------+
| SequentialNumber |
+------------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+------------------+
⚠️ Quan trọng: Thứ tự cập nhật không xác định nếu không có ORDER BY trong UPDATE (MySQL không hỗ trợ ORDER BY trong UPDATE đơn giản). Để đảm bảo thứ tự logic, hãy dùng:
SET @seq = 0;
UPDATE SequentialNumberDemo
SET SequentialNumber = @seq := @seq + 1
ORDER BY Id; -- cần cột Id hoặc cột sắp xếp rõ ràng
Hoặc (an toàn hơn) tạo bảng mới với AUTO_INCREMENT.