Vấn đề
Cần bảng thứ 2 có ID bắt đầu từ giá trị tiếp theo của auto-increment bảng thứ 1.
Giải pháp dùng LAST_INSERT_ID()
Tạo bảng 1 với auto-increment:
CREATE TABLE DemoTable1 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
Chèn 1 bản ghi:
INSERT INTO DemoTable1 VALUES (NULL);
Lấy ID vừa chèn vào biến người dùng:
SET @studentId = LAST_INSERT_ID();
Tạo bảng 2 (không auto-increment):
CREATE TABLE DemoTable2 (Id INT);
Chèn vào bảng 2 với ID = @studentId + 1:
INSERT INTO DemoTable2 VALUES (@studentId + 1);
Kết quả:
-- DemoTable1
+-----------+
| StudentId |
+-----------+
| 1 |
+-----------+
-- DemoTable2
+------+
| Id |
+------+
| 2 |
+------+
Các trường hợp ứng dụng
- Quản lý sequence chung cho nhiều bảng (shared sequence).
- Đồng bộ ID giữa master-slave tables.
- Migration dữ liệu cần giữ mối quan hệ ID.
Lưu ý
LAST_INSERT_ID()trả về giá trị auto-increment của câu INSERT gần nhất trong session hiện tại.- An toàn cho multi-user vì mỗi session có giá trị riêng.
- Nếu cần sequence toàn cục, cân nhắc dùng bảng sequence riêng hoặc
AUTO_INCREMENTvới offset/step (MySQL 8.0+).