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

Jak vygeneruji jedinečný, náhodný řetězec pro jeden z mých sloupců tabulky MySql?

PŘED AKTUALIZACÍ řešení spouštěče:

Pomocí:

můžete vytvořit 6-znakový náhodný alfanumerický řetězec velkých písmen
lpad(conv(floor(rand()*pow(36,6)), 10, 36), 6, 0);

Abyste nevytvářeli již existující řetězec, můžete použít BEFORE UPDATE spoušť.

DELIMITER //
CREATE TRIGGER `unique_codes_before_update`
BEFORE UPDATE ON `unique_codes` FOR EACH ROW 
BEGIN
    declare ready int default 0;
    declare rnd_str text;
    if new.CODE is null then
        while not ready do
            set rnd_str := lpad(conv(floor(rand()*pow(36,6)), 10, 36), 6, 0);
            if not exists (select * from unique_codes where CODE = rnd_str) then
                set new.CODE = rnd_str;
                set ready := 1;
            end if;
        end while;
    end if;
END//
DELIMITER ;

Pokaždé, když nastavíte svůj CODE sloupec na NULL v UPDATE spouštěč vytvoří nový náhodný řetězec ve smyčce, dokud nebude v tabulce nalezena žádná shoda.

Nyní můžete všechny hodnoty NULL nahradit:

update unique_codes set CODE = NULL where code is NULL;

V ukázce SQLFiddle zde Používám jednoznakový náhodný řetězec k prokázání, že žádná hodnota není duplikována.

Stejný kód můžete použít také v BEFORE INSERT spoušť. Tímto způsobem stačí vložit nové řádky s CODE=NULL a spouštěč jej nastaví na nový jedinečný náhodný řetězec. A už ho nikdy nebudete muset aktualizovat.

Původní odpověď (32 znakových řetězců):

select lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0) as rnd_str_8;

-- output example: 3AHX44TF

vygeneruje 8místný alfanumerický náhodný řetězec velkých písmen. Spojením čtyř z nich získáte 32 znaků:

select concat(
    lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0),
    lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0),
    lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0),
    lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0)
) as rnd_str_32;

-- output example: KGC8A8EGKE7E4MGD4M09U9YWXVF6VDDS

http://sqlfiddle.com/#!9/9eecb7d/76933

Jak je to tedy s jedinečností? No - zkuste vygenerovat duplikáty;-)



  1. můžeme mít cizí klíč, který není primárním klíčem v žádné jiné tabulce?

  2. Jak spustím PHP, které je uloženo v databázi MySQL?

  3. Odstranit databázové poštovní zprávy z databáze msdb v SQL Server (T-SQL)

  4. SQL Server In-Memory OLTP:Základy