生成表唯一字符串


Generate table-unique string

所以基本上这个

我想在我的表的每一行都有一个5个字符长的字符串/令牌

每个令牌由以下字符组成

abcdefghijklmnopqrstuvwxyz0123456789

创建代币不是问题,使其独一无二是

我知道我可以创建一个令牌,检查它是否存在,然后循环直到它不存在,但这似乎真的很低效,可能会有很多查询

有没有更清洁、更快的解决方案?

您只需生成一个0到60466175之间的随机数,检查它是否存在,然后生成CONV([the number], 10, 36)

碰撞的可能性在很大程度上取决于你有多少数据,如果这似乎是一个问题,解决方案可能是提前将所有6000多万个组合填充到一个表中,并添加一个used字段。随机选取一个where used = 0,并将其标记为当时已使用。

编辑:另一位用户对原始问题的评论甚至更好,从"可用代币"表中删除意味着速度会随着时间的推移而提高。

第2版:如果要确保正好有5位数字,则数字必须>=1679616。

这可能是您想要的:

https://gist.github.com/gordonbrander/2230317

var ID = function () {
  // Math.random should be unique because of its seeding algorithm.
  // Convert it to base 36 (numbers + letters), and grab the first 9 characters
  // after the decimal.
  return '_' + Math.random().toString(36).substr(2, 9);
};

如果你愿意使用js库,那么:

https://www.npmjs.com/package/shortid

http://hashids.org/