sql >> Databasteknik >  >> RDS >> Mysql

Generera en slumpmässig och unik sträng med 8 tecken med MySQL

Jag skulle inte bry mig om sannolikheten för en kollision. Skapa bara en slumpmässig sträng och kontrollera om den finns. Om det gör det, försök igen och du behöver inte göra det mer än ett par gånger om du inte har ett stort antal skyltar redan tilldelade.

En annan lösning för att generera en 8-tecken lång pseudo-slumpmässig sträng i ren (My)SQL:

SELECT LEFT(UUID(), 8);

Du kan prova följande (pseudokod):

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

Eftersom det här inlägget har fått en oväntad uppmärksamhet, låt mig lyfta fram ADTCs kommentar :ovanstående kodbit är ganska dum och producerar sekventiella siffror.

För lite mindre dum slumpmässighet prova något sånt här istället :

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

Och för sann (kryptografiskt säker) slumpmässighet, använd RANDOM_BYTES() snarare än RAND() (men då skulle jag överväga att flytta upp den här logiken till applikationslagret).



  1. Förbättra backend-prestanda Del 2/3:Använda databasindex

  2. Hämta en lista över privata procedurer/funktioner från en paketkropp

  3. Problem med att skapa främmande nyckel i Oracle

  4. Hur kontrollerar jag NLS_LANG för klienten?