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

MySQLを使用してランダムで一意の8文字の文字列を生成する

    衝突の可能性は気になりません。ランダムな文字列を生成し、それが存在するかどうかを確認するだけです。もしそうなら、もう一度やり直してください。すでに膨大な数のプレートが割り当てられていない限り、2、3回以上行う必要はありません。

    純粋な(My)SQLで8文字の長さの疑似ランダム文字列を生成するための別のソリューション:

    SELECT LEFT(UUID(), 8);
    

    次の(擬似コード)を試すことができます:

    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
    

    この投稿は予想外の注目を集めているので、ADTCのコメント :上記のコードは非常に馬鹿げており、連続した数字を生成します。

    少し愚かなランダム性を減らすには、代わりに次のようなものを試してください:

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

    そして、真の(暗号的に安全な)ランダム性のために、RANDOM_BYTES()を使用します RAND()ではなく (ただし、このロジックをアプリケーション層に移動することを検討します。)



    1. MariaDBでのDATE_ADD()のしくみ

    2. LOB保持

    3. count(*)とcount(column_name)、違いは何ですか?

    4. 一貫性のないPostgreSQLスレーブを再構築する方法