【问题标题】:Ensuring Unique Fields when Randomly Generating MySQL rows随机生成 MySQL 行时确保唯一字段
【发布时间】:2011-09-19 14:23:24
【问题描述】:

我正在生成大约 100,000 行随机数据,大约 10 列,我需要所有值都是唯一的。

我能想到的唯一可靠方法是对每个随机生成进行查询,以确保它尚不存在,但这会增加数十万个查询。另一种选择是在表上创建一个 UNIQUE 约束,但是我需要有一些方法来计算有多少重复失败,以便我可以重新创建这些行(我需要知道我将生成尽可能多的随机行如指定的那样),或者在插入失败时使用新一代重试。有没有办法做到这一点?还是我错过了其他一些方法?

【问题讨论】:

  • 你是如何生成随机值的?数据类型?

标签: python mysql unique-constraint mysql-python


【解决方案1】:

我应该在 python 中生成随机数,在一个列表中。 然后,使用 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。生成的随机数中没有重复!

【讨论】:

  • 这似乎是最好的解决方案。需要生成额外的数字是一个真正的痛苦,特别是因为我必须生成 2 x(列数) - 或者差不多,对于 10 个列将是 200 万。
【解决方案2】:

您用什么类型的数据填充列?它必须遵循任何特定格式吗?

无论数据格式如何,我都会离线生成所有数据,然后一次性将其全部插入数据库。

例如:

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

这样你就知道所有的字符串都是唯一的,并且随机播放会使顺序(更多)随机。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2012-11-21
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多