数据库表中唯一的随机字符串

Posted

技术标签:

【中文标题】数据库表中唯一的随机字符串【英文标题】:Random string unique in database table 【发布时间】:2019-09-11 02:29:39 【问题描述】:

我需要生成一个随机字符串(8 位字母数字代码)并将其与我的锦标赛行一起保存到数据库中。

问题是这段代码需要在整个表格中是唯一的并且是随机的(不是增量的),因为我不希望它是可预测的(人们使用它来参加锦标赛)。

所以我需要一些东西来生成代码,但是当它已经在表中时,然后生成新的。一种方法是生成代码,然后检查数据库是否存在,然后在发生冲突时生成新的。但是这个解决方案有很多问题,比如它可以永远运行并且速度很慢。

【问题讨论】:

为什么不将唯一的(数字和递增的)ID 与一些秘密连接起来并使用它的哈希? @EugenRieck 有没有短的 8 字符散列? Generating a random & unique 8 character string using mysql的可能重复 不是。我不在乎它是否生成了我的 SQL @alfasin 。 . .这并不能保证唯一性。 【参考方案1】:

答案是使用结合了“独特”部分和“随机”部分的unique identifier。

“唯一”部分可以是单调递增的计数器(例如数据库中的记录或行号),也可以是使用全周期 linear congruential generator 生成的数字(以伪随机方式循环遍历所有可能的值)在重复之前的时间段内)。 “随机”部分只是使用加密随机数生成器(Node.js 拥有;查看文档)生成的随机数。一般来说,时间越长,预测的可能性就越小。

此外,为了生成唯一标识符,几乎没有理由像现在这样将自己限制为 8 个字符的字母数字标识符。

即使您希望最终用户在某些时候输入“随机”和“唯一”ID,也可以使用一些技术来简化输入超过 8 个字符的 ID 的任务;它们包括——

向 ID 添加“校验和”字符, 将 ID 分成连字符分隔的块,并且 采用类似于比特币的 BIP39 的系统,其中每个 ID 都可转换为一系列令人难忘的单词。

【讨论】:

以上是关于数据库表中唯一的随机字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用唯一随机值更新sql表中的所有行,而不使用c#中的主键或唯一键

oracle随机uuid字符串生成函数

如何根据查询结果返回表中的随机记录?

数据库索引总结

如何将一个表中的随机值添加到另一个 Oracle SQL

顺序表