S pravděpodobností kolize bych se neobtěžoval. Stačí vygenerovat náhodný řetězec a zkontrolovat, zda existuje. Pokud ano, zkuste to znovu a neměli byste to dělat více než několikrát, pokud již nemáte přiřazeno velké množství talířů.
Další řešení pro generování 8znakového pseudonáhodného řetězce v čistém (My)SQL:
SELECT LEFT(UUID(), 8);
Můžete zkusit následující (pseudokód):
DO
SELECT LEFT(UUID(), 8) INTO @plate;
INSERT INTO plates (@plate);
WHILE there_is_a_unique_constraint_violation
-- @plate is your newly assigned plate number
Protože se tomuto příspěvku dostalo neočekávané úrovně pozornosti, dovolte mi zdůraznit Komentář ADTC :Výše uvedený kus kódu je docela hloupý a vytváří sekvenční číslice.
Pro trochu méně hloupou náhodnost zkuste místo toho něco takového:
SELECT LEFT(MD5(RAND()), 8)
A pro skutečnou (kryptograficky bezpečnou) náhodnost použijte RANDOM_BYTES()
spíše než RAND()
(ale pak bych zvážil přesunutí této logiky do aplikační vrstvy).