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

Thiết lập auto-increment khác nhau cho 2 bảng dùng biến người dùng

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_INCREMENT với offset/step (MySQL 8.0+).