Cập nhật hàng loạt thêm số thứ tự tự động vào chuỗi trong MySQL
Sử dụng biến user-defined (@row) trong câu lệnh UPDATE để tạo số thứ tự tăng dần và nối chuỗi.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
StudentId VARCHAR(80)
);
mysql> INSERT INTO DemoTable VALUES ('John'), ('John'), ('John'), ('John'), ('John');
2. Xem dữ liệu ban đầu
mysql> SELECT * FROM DemoTable;
+-----------+ | StudentId | +-----------+ | John | | John | | John | | John | | John | +-----------+
3. Truy vấn cập nhật: Nối số thứ tự 1,2,3,4,5
mysql> UPDATE DemoTable, (SELECT @row := 0) r
SET StudentId = CONCAT('John', @row := @row + 1);
Kết quả: Query OK, 5 rows affected
4. Kiểm tra kết quả
mysql> SELECT * FROM DemoTable;
+-----------+ | StudentId | +-----------+ | John1 | | John2 | | John3 | | John4 | | John5 | +-----------+
Giải thích cơ chế:
(SELECT @row := 0) r: Khởi tạo biến @row = 0 (bảng dẫn xuất)@row := @row + 1: Tăng @row lên 1 cho mỗi hàng, trả về giá trị mớiCONCAT('John', ...): Nối chuỗi 'John' với số thứ tự- MySQL xử lý hàng theo thứ tự tự nhiên (thường là theo PRIMARY KEY hoặc thứ tự chèn)
Lưu ý: Thứ tự cập nhật không được đảm bảo nếu không có ORDER BY. Để an toàn, dùng bảng tạm hoặc CTE (MySQL 8.0+):
WITH numbered AS (
SELECT StudentId, ROW_NUMBER() OVER () AS rn FROM DemoTable
)
UPDATE DemoTable d
JOIN numbered n ON d.StudentId = n.StudentId
SET d.StudentId = CONCAT('John', n.rn);