Jeśli utworzysz następującą tabelę:
CREATE TABLE sequence (
sequence_id BIGINT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`sequence_id`)
)
Następnie zadaj te trzy zapytania jedno po drugim:
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() AS sequence;
Trzecie zapytanie jest gwarantowane aby zwrócić unikalny numer sekwencyjny. Ta gwarancja obowiązuje nawet wtedy, gdy z bazą danych są połączone dziesiątki różnych programów klienckich. Na tym polega piękno AUTO_INCREMENT.
Zamiast po prostu generować jedenaście milionów tych numerów sekwencyjnych z góry, możesz użyć tych zapytań SQL, aby uzyskać unikalny numer sekwencyjny, kiedy tylko tego potrzebujesz.
Jeśli musisz zawinąć do numeru sekwencyjnego 12 milionów, możesz zamiast tego użyć tych zapytań.
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() MOD 12000000 AS sequence;
Sztuczka polega na tym, aby użyć numeru sekwencyjnego auto-inkrementacji w celu zapewnienia niepowtarzalności, ale także usunąć wiersze w tabeli, aby nie pochłonęła dużo miejsca.
Zauważ, że możesz również użyć numeru sekwencyjnego LAST_INSERT_ID() do innych celów, jak na przykład.
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;