6

我有一个表,我添加了一个名为的列phone- 该表还有一个 id 设置为 auto_increments 的主键。如何将随机值插入电话列,不会重复。以下 UPDATE 语句确实插入了随机值,但并非所有这些值都是唯一的。另外,我没有卖掉我也phone正确地转换了该字段,但是在尝试使用 ALTER TABLE 命令将其设置为 int(11) 时遇到了问题(主要是,它运行正确,但是在添加一行时遇到了新问题电话号码,插入的值被翻译成不同的号码)。

更新选票设置电话 = FLOOR(50000000 * RAND()) + 1;

表规格

+------------+--------------+------+-----+-------- -+----------------+
| 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 |
+------------+--------------+------+-----+-------- -+----------------+
| 编号 | 整数(11) | 否 | 优先级 | 空 | 自动增量 |
| 电话 | varchar(11) | 否 | | 空 | |
| 年龄 | 小整数(3) | 否 | | 空 | |
| 测试 | 小整数(4) | 否 | | 0 | |
| 注意 | varchar(100) | 是 | | 空 | |
+------------+--------------+------+-----+-------- -+----------------+
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 回答