【问题标题】:Generating unique IDs on the fly动态生成唯一 ID
【发布时间】:2017-05-26 01:48:14
【问题描述】:

我正在使用这个 SQL 查询来创建一个对列唯一的新 ID。我想我很久以前从另一个 StackOverlow 帖子中得到了这个想法。但它不起作用,我不知道为什么。我会生成 100-200 个 ID(将每个 ID 添加到数据库中),有时我会得到重复。

这个查询有什么明显的问题吗?

SELECT FLOOR(RAND() * 99999) AS random_num
FROM listings 
WHERE 'random_num' NOT IN (SELECT identifier FROM listings)
LIMIT 1

【问题讨论】:

  • 为什么不能只使用自增字段?
  • 这是一种我不希望下一行容易被猜到的情况

标签: mysql sql uniqueidentifier


【解决方案1】:

我想你打算:

SELECT l.*
FROM (SELECT FLOOR(RAND() * 99999) AS random_num
      FROM listings l
     ) l
WHERE random_num NOT IN (SELECT identifier FROM listings)
LIMIT 1

您的代码有'random_num',它是一个字符串,不太可能与数字标识符匹配。

我认为你应该只使用auto_increment

【讨论】:

  • 是的,就是这张票。简单的错误,但我只是看不到它
【解决方案2】:

对于 postgresql,你可以使用这个站点的技术:id-generator-for-postgresql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2015-11-30
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多