6

「」という列を追加したテーブルがありますphone。このテーブルには、auto_incrementsの主キーとして設定されたIDもあります。重複しないランダムな値を電話の列に挿入するにはどうすればよいですか。次のUPDATEステートメントはランダムな値を挿入しましたが、すべてが一意であるとは限りません。また、私は売られていませんが、phoneフィールドを正しくキャストしましたが、ALTER TABLEコマンドを使用してint(11)として設定しようとすると問題が発生しました(主に、正しく実行されましたが、新しい行を追加すると電話番号、挿入された値は別の番号に変換されました)。

UPDATE Ballot SET phone = FLOOR(50000000 * RAND())+ 1;

テーブルスペック

+ ------------ + -------------- + ------ + ----- + -------- -+ ---------------- +
| フィールド| タイプ| ヌル| キー| デフォルト| エクストラ|
+ ------------ + -------------- + ------ + ----- + -------- -+ ---------------- +
| id | int(11)| いいえ| PRI | NULL | auto_increment |
| 電話| varchar(11)| いいえ| | NULL | |
| 年齢| tinyint(3)| いいえ| | NULL | |
| テスト| tinyint(4)| いいえ| | 0 | |
| 注| varchar(100)| はい| | NULL | |
+ ------------ + -------------- + ------ + ----- + -------- -+ ---------------- +
4

3 に答える 3

6
-- tbl_name: Table
-- column_name: Column
-- chars_str: String containing acceptable characters
-- n: Length of the random string
-- dummy_tbl: Not a parameter, leave as is!
UPDATE tbl_name SET column_name = (
  SELECT GROUP_CONCAT(SUBSTRING(chars_str , 1+ FLOOR(RAND()*LENGTH(chars_str)) ,1) SEPARATOR '')
  FROM (SELECT 1 /* UNION SELECT 2 ... UNION SELECT n */) AS dummy_tbl
);

-- Example
UPDATE tickets SET code = (
  SELECT GROUP_CONCAT(SUBSTRING('123abcABC-_$@' , 1+ FLOOR(RAND()*LENGTH('123abcABC-_$@'))     ,1) SEPARATOR '')
  FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS dummy_tbl
);

MySQLのランダム文字列

于 2012-05-29T14:45:22.703 に答える
3

これを試して

UPDATE Ballot SET phone = FLOOR(50000000 * RAND()) * id;
于 2011-01-11T18:24:30.320 に答える
1

これに取り組むには、必要な範囲の数値を含む(一時的な)テーブルを生成し、乱数を指定するテーブルの各レコードをループします。一時テーブルからランダムな要素を選択し、それでテーブルを更新して、一時テーブルから削除します。美しくも速くもありませんが、開発とテストは簡単です。

于 2011-01-11T18:28:54.340 に答える