2011-01-11 106 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