Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Generowanie losowego i unikalnego ciągu 8 znaków za pomocą MySQL

Nie zawracałbym sobie głowy prawdopodobieństwem kolizji. Po prostu wygeneruj losowy ciąg i sprawdź, czy istnieje. Jeśli tak, spróbuj ponownie i nie powinieneś robić tego więcej niż kilka razy, chyba że masz już przypisaną dużą liczbę tablic.

Inne rozwiązanie do generowania 8-znakowego pseudolosowego ciągu w czystym (My)SQL:

SELECT LEFT(UUID(), 8);

Możesz wypróbować następujące (pseudo-kod):

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

Ponieważ ten post spotkał się z nieoczekiwanym zainteresowaniem, pozwólcie, że wyróżnię Komentarz ADTC :powyższy fragment kodu jest dość głupi i tworzy kolejne cyfry.

Aby uzyskać nieco mniej głupią losowość, spróbuj zamiast tego czegoś takiego:

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

Aby uzyskać prawdziwą (bezpieczną kryptograficznie) losowość, użyj RANDOM_BYTES() zamiast RAND() (ale wtedy rozważyłbym przeniesienie tej logiki do warstwy aplikacji).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql Count nie może pokazać wartości 0

  2. Jak połączyć bazę danych MySQL z witryną PHP?

  3. Usuń tagi HTML z rekordu

  4. MySQL — wyzwalacz aktualizacji tej samej tabeli po wstawieniu

  5. Wyzwalacz MySQL po aktualizacji tylko w przypadku zmiany wiersza