Nếu bạn tạo bảng sau:
CREATE TABLE sequence (
sequence_id BIGINT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`sequence_id`)
)
Sau đó, lần lượt đưa ra ba truy vấn này:
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() AS sequence;
Truy vấn thứ ba được đảm bảo để trả về một số thứ tự duy nhất. Đảm bảo này được giữ ngay cả khi bạn có hàng chục chương trình khách khác nhau được kết nối với cơ sở dữ liệu của bạn. Đó là vẻ đẹp của AUTO_INCREMENT.
Thay vì chỉ tạo 11 triệu trong số các số thứ tự này từ trước, bạn có thể sử dụng các truy vấn SQL này để nhận một số thứ tự duy nhất bất cứ khi nào bạn cần.
Nếu bạn phải xoay quanh số thứ tự 12 triệu, bạn có thể sử dụng các truy vấn này để thay thế.
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() MOD 12000000 AS sequence;
Mẹo ở đây là sử dụng số thứ tự tăng tự động để tạo tính duy nhất, nhưng cũng xóa các hàng trong bảng để nó không chiếm nhiều dung lượng.
Lưu ý rằng bạn cũng có thể sử dụng số thứ tự của LAST_INSERT_ID () cho các mục đích khác, chẳng hạn như vậy.
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
INSERT INTO user (userid, username, phone)
VALUES (LAST_INSERT_ID() MOD 12000000, 'Joe', '800-555-1212');
SELECT LAST_INSERT_ID() MOD 12000000 AS sequence;