sql >> Database >  >> RDS >> Mysql

Een willekeurige en unieke reeks van 8 tekens genereren met MySQL

Ik zou me niet druk maken over de kans op een aanrijding. Genereer gewoon een willekeurige string en controleer of deze bestaat. Als dit het geval is, probeer het dan opnieuw en je hoeft het niet meer dan een paar keer te doen, tenzij je al een groot aantal platen hebt toegewezen.

Een andere oplossing voor het genereren van een 8-karakter lange pseudo-willekeurige string in pure (My)SQL:

SELECT LEFT(UUID(), 8);

Je kunt het volgende proberen (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

Aangezien dit bericht onverwacht veel aandacht heeft gekregen, wil ik graag de aandacht vestigen op ADTC's opmerking :het bovenstaande stukje code is nogal dom en produceert opeenvolgende cijfers.

Voor iets minder domme willekeur, probeer in plaats daarvan iets als dit:

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

En voor echte (cryptografisch veilige) willekeur, gebruik RANDOM_BYTES() in plaats van RAND() (maar dan zou ik overwegen om deze logica naar de applicatielaag te verplaatsen).



  1. Hoe u uw MySQL-back-ups kunt verifiëren met ClusterControl

  2. ERROR 1067 (42000):Ongeldige standaardwaarde voor 'created_at'

  3. Verbeterde SQLite-querysyntaxis op Android

  4. PostgreSQL controleren met pgAudit