sql >> Database teknologi >  >> RDS >> Mysql

Generering af en tilfældig og unik streng på 8 tegn ved hjælp af MySQL

Jeg ville ikke bekymre mig om sandsynligheden for kollision. Bare generer en tilfældig streng og kontroller, om den findes. Hvis det gør det, så prøv igen, og du skulle ikke behøve at gøre det mere end et par gange, medmindre du allerede har tildelt et stort antal plader.

En anden løsning til at generere en 8-tegn lang pseudo-tilfældig streng i ren (Min)SQL:

SELECT LEFT(UUID(), 8);

Du kan prøve følgende (pseudo-kode):

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

Da dette indlæg har fået et uventet niveau af opmærksomhed, lad mig fremhæve ADTCs kommentar :Ovenstående kodestykke er ret dumt og producerer sekventielle cifre.

For lidt mindre dumme tilfældigheder prøv noget som dette i stedet :

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

Og for ægte (kryptografisk sikker) tilfældighed, brug RANDOM_BYTES() i stedet for RAND() (men så ville jeg overveje at flytte denne logik op til applikationslaget).



  1. Hvordan LYDER SOM virker i MariaDB

  2. UTC_TIME Eksempler – MySQL

  3. Sådan starter parallelle planer – del 5

  4. Hurtigt at finde forskellige værdier