2011-09-19 19 views
0

我生成了大約10萬行隨機數據的行,大約有10列,我需要讓所有值都是唯一的。隨機生成MySQL行時確保唯一字段

我能想到的唯一可行的方法就是對每個隨機生成一個查詢,以確保它不存在,但增加了數十萬個查詢。另一種方法是在表上創建一個UNIQUE約束,但是我需要有一些方法來計算有多少重複失敗,這樣我就可以重新創建這些行(我需要知道我將生成的行數完全是隨機的如指定的那樣),或者在插入失敗時讓新一代重試。有沒有辦法做到這一點?還是我錯過了其他一些方法呢?

+0

你怎麼生成隨機值?數據類型? – gbn

回答

2

我應該在列表中生成隨機數。 然後,使用set來獲取唯一身份。現在

l = [1,5,5,4,5,4,8,9,2] 

set(l) 

set([1, 2, 4, 5, 8, 9]) 

,你可能會產生200.000號至少拿到100.000獨特的,並截斷列表中左右。


我嘗試這樣做:

import random 
l = [] 
for i in range (200000): 
    l.append (random.random()) 
print len(set(l)) 

,它給了我一套長度200.000的。生成的隨機內沒有任何嘟!!

+0

這似乎可能是最好的解決方案。需要生成額外的數字是一個真正的痛苦,尤其是因爲我不得不生成2 x(cols數) - 或者那裏大約,10 mil將是2mil。 – lightstrike

+0

我已經通過測試編輯了我的答案。 – Louis

0

你在填寫什麼樣的數據?它是否必須遵循任何特定的格式?

無論數據格式如何,我都會離線生成所有數據,然後一次將其全部插入數據庫。

例如:

from base64 import b64encode 
from random import shuffle 

arr=[] 
for i in range(0,1000000): #Assuming you need 1mil entries 
    arr.append(b64encode(str(i))) 
shuffle(arr) 
#Add arr[] to the database 

你知道,所有的字符串將是唯一的,洗牌將使得順序(更多)隨機這種方式。