Не бих се притеснявал от вероятността от сблъсък. Просто генерирайте произволен низ и проверете дали съществува. Ако се случи, опитайте отново и не трябва да го правите повече от няколко пъти, освен ако вече нямате назначен голям брой табели.
Друго решение за генериране на 8-символен дълъг псевдослучаен низ в чист (My)SQL:
SELECT LEFT(UUID(), 8);
Можете да опитате следното (псевдокод):
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
Тъй като тази публикация получи неочаквано ниво на внимание, позволете ми да подчертая Коментар на ADTC :горната част от кода е доста глупава и произвежда последователни цифри.
За малко по-малко глупава произволност опитайте нещо подобно:
SELECT LEFT(MD5(RAND()), 8)
И за истинска (криптографски защитена) произволност, използвайте RANDOM_BYTES()
вместо RAND()
(но тогава бих помислил да преместя тази логика нагоре към слоя на приложението).