Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Gerando uma string de 8 caracteres aleatória e exclusiva usando o MySQL


Eu não me incomodaria com a probabilidade de colisão. Basta gerar uma string aleatória e verificar se ela existe. Se isso acontecer, tente novamente e você não precisará fazer isso mais do que algumas vezes, a menos que tenha um grande número de placas já atribuídas.

Outra solução para gerar uma string pseudo-aleatória de 8 caracteres em puro (My)SQL:
SELECT LEFT(UUID(), 8);

Você pode tentar o seguinte (pseudo-código):
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

Como esta postagem recebeu um nível inesperado de atenção, deixe-me destacar Comentário do ADTC :o trecho de código acima é bastante burro e produz dígitos sequenciais.

Para uma aleatoriedade um pouco menos estúpida, tente algo assim:
SELECT LEFT(MD5(RAND()), 8)

E para aleatoriedade verdadeira (criptograficamente segura), use RANDOM_BYTES() em vez de RAND() (mas então eu consideraria mover essa lógica para a camada de aplicação).