作成時にランダムな値で埋められるusers
新しいフィールドでmysqlデータベースを拡張したいと思います。unique
現在、フィールドを作成し、ランダムな文字列を追加し、unique
キーを追加するこれらのコマンドがありますが、明らかに最後のコマンドを実行すると、キーを追加しようとするとエラーをスローする等しいランダムな文字列を持つフィールドがあります。
(私は約20k行あるので、「100k乱数文字列」では重複の可能性がかなりありますが、より長い文字列でも常に可能性があるので、重複の可能性の基本的な問題をどのように処理しますか?)
ALTER TABLE `users` ADD `nick` VARCHAR( 55 ) NOT NULL AFTER `id`;
UPDATE `users` SET `nick` = CONCAT('user_', FLOOR(RAND() * 100000));
ALTER TABLE `users` ADD UNIQUE ( `nick` );
私の質問は、すべてのランダム文字列が明確であることを確認する方法、または1回のスワイプでこのアップグレードとランダム文字列の生成を実現する方法(できればSQLのみ)です。
(この同様のSOトピックで受け入れられた回答は、実際には解決策を提供しません。)
[編集:これまでのところ、テーブルにはユーザーのニックネームはありません。開発中のアップデートでは、ユーザーがユーザーのニックネームを一度設定する機能が追加されますが、ユーザーが設定するまで、一時的で一意のランダムなユーザーのニックネームをユーザーに割り当ててもらいたいです。セキュリティ上の理由から、プライマリIDは使用しません。そのユーザーのニックネームで]
[編集:ユーザーIDの提案されたハッシュを試してみたところ、ハッシュの8つの兆候があると、重複なしで実行されることがわかりました(6はまだかなり頻繁に重複しており、2万行の場合)が、他に方法がないかどうか疑問に思います複製のオッズを小さくするよりも、これにアプローチします。
それ以外の場合、これは機能します:
ALTER TABLE `users` ADD `nick` VARCHAR( 55 ) NOT NULL AFTER `id`;
UPDATE `users` SET `nick` = CONCAT('user_', SUBSTR(MD5(`users`.`id`), 1, 8));
ALTER TABLE `users` ADD UNIQUE ( `nick` );