Si vous créez le tableau suivant :
CREATE TABLE sequence (
sequence_id BIGINT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`sequence_id`)
)
Émettez ensuite ces trois requêtes l'une après l'autre :
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() AS sequence;
La troisième requête est garantie pour renvoyer un numéro de séquence unique. Cette garantie est valable même si vous avez des dizaines de programmes clients différents connectés à votre base de données. C'est la beauté d'AUTO_INCREMENT.
Au lieu de simplement générer onze millions de ces numéros de séquence à l'avance, vous pouvez utiliser ces requêtes SQL pour obtenir un numéro de séquence unique chaque fois que vous en avez besoin.
Si vous devez revenir au numéro de séquence 12 millions, vous pouvez utiliser ces requêtes à la place.
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() MOD 12000000 AS sequence;
L'astuce ici consiste à utiliser un numéro de séquence auto-incrémenté pour l'unicité, mais également à supprimer les lignes du tableau afin qu'il n'occupe pas beaucoup d'espace.
Notez que vous pouvez également utiliser le numéro de séquence de LAST_INSERT_ID() à d'autres fins, comme par exemple.
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;