Mysql
 sql >> Base de données >  >> RDS >> Mysql

Générer une chaîne de caractères aléatoire et unique à l'aide de MySQL

Je ne me préoccuperais pas du risque de collision. Générez simplement une chaîne aléatoire et vérifiez si elle existe. Si c'est le cas, réessayez et vous ne devriez pas avoir besoin de le faire plus de deux fois, sauf si vous avez déjà un grand nombre de plaques attribuées.

Une autre solution pour générer une chaîne pseudo-aléatoire longue de 8 caractères en (My)SQL pur :

SELECT LEFT(UUID(), 8);

Vous pouvez essayer ce qui suit (pseudo-code) :

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

Étant donné que ce message a reçu un niveau d'attention inattendu, permettez-moi de souligner Commentaire de l'ADTC  :le morceau de code ci-dessus est assez stupide et produit des chiffres séquentiels.

Pour un hasard un peu moins stupide, essayez quelque chose comme ça à la place :

SELECT LEFT(MD5(RAND()), 8)

Et pour un vrai hasard (cryptographiquement sécurisé), utilisez RANDOM_BYTES() plutôt que RAND() (mais j'envisagerais alors de déplacer cette logique vers la couche application).