sql >> Databáze >  >> RDS >> Mysql

Generování náhodného a jedinečného 8znakového řetězce pomocí MySQL

S pravděpodobností kolize bych se neobtěžoval. Stačí vygenerovat náhodný řetězec a zkontrolovat, zda existuje. Pokud ano, zkuste to znovu a neměli byste to dělat více než několikrát, pokud již nemáte přiřazeno velké množství talířů.

Další řešení pro generování 8znakového pseudonáhodného řetězce v čistém (My)SQL:

SELECT LEFT(UUID(), 8);

Můžete zkusit následující (pseudokód):

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

Protože se tomuto příspěvku dostalo neočekávané úrovně pozornosti, dovolte mi zdůraznit Komentář ADTC :Výše ​​uvedený kus kódu je docela hloupý a vytváří sekvenční číslice.

Pro trochu méně hloupou náhodnost zkuste místo toho něco takového:

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

A pro skutečnou (kryptograficky bezpečnou) náhodnost použijte RANDOM_BYTES() spíše než RAND() (ale pak bych zvážil přesunutí této logiky do aplikační vrstvy).



  1. Jak exportovat data ve formátu CSV z SQL Server pomocí sqlcmd?

  2. Databázové tipy pro začátečníky

  3. CASE vs. DECODE

  4. Jak formátovat datum v T-SQL