sql >> データベース >  >> RDS >> Mysql

MySqlテーブル列の1つに一意のランダムな文字列を生成するにはどうすればよいですか?

    更新トリガーソリューションの前:

    次のコマンドを使用して、6文字のランダムな英数字の大文字の文字列を作成できます。

    lpad(conv(floor(rand()*pow(36,6)), 10, 36), 6, 0);
    

    既存の文字列を作成しないために、BEFORE UPDATEを使用できます。 引き金。

    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 ;
    

    CODEを設定するたびに 列からNULL UPDATEで ステートメントの場合、トリガーは、テーブルに一致するものが見つからなくなるまで、ループ内に新しいランダムな文字列を作成します。

    これで、すべてのNULL値を次のように置き換えることができます:

    update unique_codes set CODE = NULL where code is NULL;
    

    SQLFiddleデモはこちら 1文字のランダムな文字列を使用して、値が重複していないことを示します。

    BEFORE INSERTでも同じコードを使用できます 引き金。このようにして、CODE=NULLで新しい行を挿入できます。 トリガーはそれを新しい一意のランダムな文字列に設定します。また、再度更新する必要はありません。

    元の回答(32文字の文字列):

    select lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0) as rnd_str_8;
    
    -- output example: 3AHX44TF
    

    8文字の英数字の大文字のランダムな文字列を生成します。それらのうちの4つを連結して、32文字を取得します。

    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

    では、ユニクネスはどうですか?ええと-重複を生成してみてください;-)



    1. リンクサーバーのOLEDBプロバイダーMicrosoft.Jet.OLEDB.4.0のインスタンスを作成できませんnull

    2. 長時間実行されるクエリ(MySql)、ApacheTomcatDataSourceを自動的に強制終了します

    3. PostgreSQLの日付から日、月、年を取得する3つの関数

    4. SQLServerでJSONドキュメントから重複キーを返す方法