以下是否有可能,我一直想着解决方案。
我有一个sql表,非常简单的表,很少的文本列和两个int列。
我想要理想的做法是允许用户添加一行,但只添加文本列并让sql自动将数字放在整数列中。
理想情况下,这些数字就像这些数字一样随机但不是已经存在(因此每行都有一个唯一的数字)。也是10位数(但想想可能会推动它)。
无论如何,我可以在查询中实现这一点吗?
由于
答案 0 :(得分:0)
当然 - 在计算它们之后,您将字符串作为参数传递给Insert语句和值。您可以使用SQL fucntion生成随机数,或使用您调用的代码生成它们。
答案 1 :(得分:0)
您可以为行设置唯一的int编号,并将其设置为AUTO_INCREMENT。但是,如果你想要一个像随机哈希的东西,你需要在你的后端做。 (或在存储过程中)
只是一个想法:如果你生成足够长的随机字符串,你不必担心通常会有重复。因此,生成随机字符串是安全的,尝试插入并重复,直到出现重复的输入错误。大部分时间都不会发生,所以它可能比用select选择它更快。
答案 2 :(得分:0)
您可以使用MySQL生成随机数。这将生成0到10.000之间的随机数:
FLOOR(RAND() * 10001)
如果你真的希望数字总是10位数,你可以生成一个介于1.000.000.000和9.999.999.999之间的数字,如下所示:
FLOOR(RAND() * 9000000000) + 1000000000
数字不唯一的可能性为~0.0000000001%,并且在插入新行时会上升。对于0%的碰撞几率,我建议以正确的方式执行此操作并在代码而不是数据库中处理此问题。
随机函数解释:
正在发生的事情是RAND()
生成一个介于0和1之间的随机十进制数(从不实际为1)。然后我们将该数字乘以我们希望产生的最大数量加1.我们加1,因为设定的最大数字10产生的最大数字将是9,XXXX并且实际上从未达到10或更高(记得我说过{{ 1}}永远不会生成1),所以我们添加加1来产生10,XXXX的可能性,我们稍后使用RAND()
来生成10.在这种情况下我们不添加1因为10.000.000.000将变得可能并且它违反了我们的10位数边界。然后我们添加我们想要产生的最小数字(在这种情况下为+ 1.000.000.000),同时从我们输入的数字中减去相同的数字(最大数字)。