MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでランダムな10文字の文字列を生成する方法|rand()とchar()の活用

MySQLでは、組み込み関数「rand()」と「char()」を組み合わせることで、ランダムな10文字の文字列を簡単に生成できます。この記事では、小文字・大文字それぞれのパターンでランダム文字列を作成するSQLクエリと、その仕組みをわかりやすく解説します。

小文字のランダム10文字を生成するクエリ

以下のクエリでは、rand()関数で0〜25までの乱数を発生させ、round()で整数に丸めた値に97(ASCIIコードにおける「a」)を加算することで、a〜zの範囲の文字を1文字ずつ取得しています。それをconcat()関数で10回連結することで、10文字のランダム文字列が完成します。

mysql> SELECT concat(
    -> char(round(rand()*25)+97),
    -> char(round(rand()*25)+97),
    -> char(round(rand()*25)+97),
    -> char(round(rand()*25)+97),
    -> char(round(rand()*25)+97),
    -> char(round(rand()*25)+97),
    -> char(round(rand()*25)+97),
    -> char(round(rand()*25)+97),
    -> char(round(rand()*25)+97),
    -> char(round(rand()*25)+97)
    -> ) AS Random10CharacterString;

実行結果の例

+-------------------------+
| Random10CharacterString |
+-------------------------+
| duscikyspy              |
+-------------------------+
1 row in set (0.00 sec)

実行するたびに異なる小文字のみのランダム文字列が出力されます。

大文字のランダム10文字を生成するクエリ

大文字のランダム文字列を生成したい場合は、加算する基数を65(ASCIIコードにおける「A」)に変更するだけで対応できます。考え方は小文字の場合とまったく同じです。

mysql> SELECT concat(
    -> char(round(rand()*25)+65),
    -> char(round(rand()*25)+65),
    -> char(round(rand()*25)+65),
    -> char(round(rand()*25)+65),
    -> char(round(rand()*25)+65),
    -> char(round(rand()*25)+65),
    -> char(round(rand()*25)+65),
    -> char(round(rand()*25)+65),
    -> char(round(rand()*25)+65),
    -> char(round(rand()*25)+65)
    -> ) AS Random10CharacterString;

実行結果の例

+-------------------------+
| Random10CharacterString |
+-------------------------+
| WMWWVOIXPF              |
+-------------------------+
1 row in set (0.00 sec)

このように、出力されるのはすべて大文字(A〜Z)のランダム文字列になります。

より簡潔に書く代替手法

毎回10行にわたってchar()を並べるのは冗長に感じるかもしれません。そのような場合は、ハッシュ関数を利用した次のようなワンライナーも便利です。

mysql> SELECT SUBSTRING(MD5(RAND()), 1, 10) AS Random10CharacterString;

MD5(RAND())は32桁の16進文字列(0〜9、a〜f)を返すため、その先頭10文字を抽出すれば英数字混在のランダム文字列を1行で取得できます。

注意点:一意性の保証について

ここで紹介した方法で生成される文字列はランダムですが、理論上は同一の文字列が生成される可能性があります。テーブル内で一意性を厳密に保証したい場合は、対象カラムにUNIQUE制約を設定し、重複が検出された際に再生成を行う処理をアプリケーション側で実装するのが確実です。

  1. Javaで文字列に特定の文字が含まれているか確認する方法

    Javaでは、文字列の中に指定した文字が含まれているかどうかを、いくつかの方法で簡単に確認できます。本記事では、代表的な2つの方法である indexOf() メソッドと toCharArray() メソッドを使った文字検索の手法を、サンプルコード付きでわかりやすく解説します。 indexOf() メソッドを使う方法 Stringクラスの indexOf() メソッドを使うと、文字列の中から特定の文字を検索できます。このメソッドは、引数として渡した文字が文字列内で最初に出現する位置(インデックス)を int 型で返します。もし指定した文字が文字列中に存在しない場合は、-1 を返します。 したがっ

  2. Pythonのuuidモジュールを使ってランダムな一意ID(UUID)を生成する方法

    UUIDは「Universally Unique Identifier(汎用一意識別子)」の略称で、Pythonの標準ライブラリとして提供されているモジュールです。128ビットのIDを扱うことができ、ランダムなオブジェクトに対して重複しない識別子を生成するために広く利用されています。 UUIDの主なメリット オブジェクトごとに一意なランダムIDを簡単に生成できる。 暗号化やハッシュ処理などのアプリケーションでIDとして活用できる。 ドキュメントやアドレスなど、さまざまなデータの一意な識別子として使用できる。 方法1:uuid1() を使ってIDを生成する uuid1() は、ホストのMAC