2011-01-11 102 views
4

我有一张表,我添加了一个名为phone的列 - 表中还有一个id设置为auto_increments的主键。我怎样才能将一个随机值插入到手机列中,这将不会被复制。以下UPDATE语句确实插入了随机值,但并非全部都是唯一的。此外,我没有出售我正确地投入phone领域,但尝试将其设置为int(11)W/ALTER TABLE命令时遇到问题(主要是,它运行正常,但添加一行新的电话号码,插入的值被翻译成不同的数字)。MySQL更改表,添加具有唯一随机值的列

 
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 |    | 
+------------+--------------+------+-----+---------+----------------+ 
+0

介意我问为什么你需要做到这一点? – 2011-01-11 18:27:53

+0

当然,我正在处理一张现有的表格,该表格正在通过投票代码从明信片注册流程转换为注册流程,该流程将允许选民通过自动语音服务验证自己。该服务只允许为每个电话号码填写一项调查。 – Schoffelman 2011-01-11 22:07:07

+0

现在我认为它 - 电话领域不需要是随机的 - 只要它是唯一的,而不是现有的10位电话号码。所以像 更新投票SET phone = id; 应该/将工作。 – Schoffelman 2011-01-11 22:14:28

回答

2

试试这个

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

你试过,创造了电话,然后检查是否该值是不是已经在列?

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('[email protected]' , 1+ FLOOR(RAND()*LENGTH('[email protected]'))  ,1) SEPARATOR '') 
    FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS dummy_tbl 
); 

Random string in MySQL