MySQL Alter表,添加具有唯一随机值的列

时间:2011-01-11 18:21:57

标签: mysql alter

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

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

表格规格

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| phone      | varchar(11)  | NO   |     | NULL    |                |
| age        | tinyint(3)   | NO   |     | NULL    |                |
| test       | tinyint(4)   | NO   |     | 0       |                |
| note       | varchar(100) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

3 个答案:

答案 0 :(得分:5)

-- 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
);

Random string in MySQL

答案 1 :(得分:2)

试试这个

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

答案 2 :(得分:0)

我将通过生成一个(临时)表来解决这个问题,该表包含您需要的范围内的数字,然后循环遍历您希望提供随机数的表中的每个记录。从临时表中选择一个随机元素,用该表更新表,然后将其从临时表中删除。不漂亮,也不快......但易于开发且易于测试。