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

时间:2019-04-21 17:45:49

标签: javascript mysql sql node.js sequelize.js

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

问题是该代码在整个表中必须是唯一的,并且是随机的(不是增量的),因为我不希望它是可预测的(使用它的人参加比赛)。

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

1 个答案:

答案 0 :(得分:0)

答案是使用结合了“唯一”部分和“随机”部分的unique identifier

  • “唯一”部分可以是单调递增的计数器,也可以是使用全周期linear congruential generator(在重复之前其周期内所有可能的值伪随机循环)生成的数字。
  • “随机”部分只是一个由密码随机数生成器生成的随机数(node.js拥有;请查看文档)。通常,时间越长,可预测性就越差。

此外,出于生成唯一标识符的目的,没有理由像现在那样将自己限制为8个字符的字母数字标识符。