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

Thêm cột là kết quả nối chuỗi với giá trị AUTO_INCREMENT trong MySQL

Sử dụng LAST_INSERT_ID() để lấy giá trị AUTO_INCREMENT vừa chèn, sau đó UPDATE nối chuỗi.

Tạo bảng demo với ZEROFILL

mysql> create table DemoTable (
    UserId int(6) unsigned zerofill NOT NULL AUTO_INCREMENT,
    UserAutoIncrement char(100) default null,
    PRIMARY KEY(UserId)
);
Query OK, 0 rows affected (0.72 sec)

Chèn 1 bản ghi (không chỉ định UserId, để AUTO_INCREMENT tự sinh)

mysql> insert into DemoTable values();
Query OK, 1 row affected (0.13 sec)

Hiển thị - UserId = 000001, UserAutoIncrement = NULL

mysql> select * from DemoTable;

Kết quả

+--------+-------------------+
| UserId | UserAutoIncrement |
+--------+-------------------+
| 000001 | NULL              |
+--------+-------------------+
1 row in set (0.00 sec)

Cập nhật UserAutoIncrement = CONCAT('USER-', UserId) cho bản ghi vừa chèn

mysql> update DemoTable set UserAutoIncrement = CONCAT('USER-', UserId) WHERE UserId = LAST_INSERT_ID();
Query OK, 1 row affected (0.20 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Kiểm tra kết quả

mysql> select * from DemoTable;

Kết quả - UserAutoIncrement = 'USER-000001'

+--------+-------------------+
| UserId | UserAutoIncrement |
+--------+-------------------+
| 000001 | USER-000001       |
+--------+-------------------+
1 row in set (0.00 sec)

Giải thích:

  • LAST_INSERT_ID(): Trả về giá trị AUTO_INCREMENT của câu INSERT gần nhất trong session hiện tại.
  • ZEROFILL: Đảm bảo UserId hiển thị 6 chữ số (000001).
  • CONCAT('USER-', UserId): Nối chuỗi, UserId tự chuyển sang chuỗi '000001'.

Cách hiện đại (MySQL 5.7+): Dùng Generated Column (Virtual/Stored):

ALTER TABLE DemoTable ADD COLUMN UserAutoIncrement VARCHAR(20) 
GENERATED ALWAYS AS (CONCAT('USER-', LPAD(UserId, 6, '0'))) STORED;
Tự động tính toán, không cần trigger/update thủ công.