Se você criar a seguinte tabela:
CREATE TABLE sequence (
sequence_id BIGINT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`sequence_id`)
)
Em seguida, emita essas três consultas uma após a outra:
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() AS sequence;
A terceira consulta é garantida para retornar um número de sequência exclusivo. Essa garantia é válida mesmo se você tiver dezenas de programas clientes diferentes conectados ao seu banco de dados. Essa é a beleza de AUTO_INCREMENT.
Em vez de apenas gerar onze milhões desses números de sequência antecipadamente, você pode usar essas consultas SQL para obter um número de sequência exclusivo sempre que precisar.
Se você precisar contornar o número de sequência 12 milhões, poderá usar essas consultas.
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() MOD 12000000 AS sequence;
O truque aqui é usar um número de sequência de incremento automático para exclusividade, mas também excluir as linhas da tabela para que não ocupe muito espaço.
Observe que você também pode usar o número de sequência de LAST_INSERT_ID() para outros fins, como por exemplo.
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;