衝突の可能性は気になりません。ランダムな文字列を生成し、それが存在するかどうかを確認するだけです。もしそうなら、もう一度やり直してください。すでに膨大な数のプレートが割り当てられていない限り、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()
ではなく (ただし、このロジックをアプリケーション層に移動することを検討します。)