【问题标题】:Is mysql auto increment safe to use as userID?mysql自动增量是否可以安全地用作用户ID?
【发布时间】:2011-12-26 02:34:19
【问题描述】:

我正在开发允许人们在线创建个人资料的网站。我想知道使用 MySQL AUTO_INCREMENTed IDs 作为我的用户 ID 是否是正确的选择。还要记住,我可能必须在一天内跨多台服务器复制数据库?

例如你会在 Twitter 或 Facebook 等网站上对 userId 使用这种方法吗?


我之前尝试过使用 PHP 生成用户 ID。我用过这样的东西:

function generateID() {
      $possible = "1234567890";
      $code = "";
      $characters = mt_rand(7,14);
      $i = 0;
      while ($i < $characters) { 
            $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
            $i++;
      }
      return $code;
}

这给出了我需要的值类型,但如果该 ID 尚不存在,我总是必须从数据库中检查。

没有更好的方法吗?

【问题讨论】:

    标签: mysql auto-increment userid


    【解决方案1】:

    是的,如果您删除 id 为 7 的行,那么自动增量的下一个值将是 8 而不是 7。所以所有的价值观肯定是独一无二的。并且您将需要截断表格以再次开始自动增量。因此,您始终可以为用户 ID 使用自动递增字段。

    【讨论】:

      【解决方案2】:

      不,这不是一个好主意,因为 auto_increment id 不容易移植。对于您的用户 ID,您需要可以备份、恢复、在数据库实例之间移动等的 ID,而不必担心 ID 冲突。

      最好使用 UUID 之类的东西生成唯一的数字或字母数字字符串。

      【讨论】:

      • 没有什么能阻止你创建复合键。我不会反对,但你使用 auto_increment 太快了。
      【解决方案3】:

      就个人而言,是的,我认为是的,直到某一点。 当使用自动增量字段复制数据库表时,我认为该字段保留其最大值(取决于 如何您复制它,我想到的场景是 mysqldump data) 所以当你添加一个新行时,它将被分配下一个 ID。

      但是,如果您要同时在多个数据库上运行它,并且它们没有被复制,那么您将需要其他一些生成 ID 的方法以避免获取具有相同 ID 的行(尽管我想不出一个你会这样做的场景)。

      我不能说这是否是最佳做法,但它确实有效。

      【讨论】:

        【解决方案4】:

        鉴于您正在提前计划并且可能会跨数据库分发数据,您最好考虑使用 UUID() 函数来获取唯一标识符。这使得未来数据的合并变得更加容易。

        【讨论】:

        • 复合主键是比 UUID() 更好的数据合并解决方案。
        • 关于这个问题有两种思想流派 - 你要么使用人工生成的密钥来唯一标识某人,要么使用复合主键 - 例如,Joe Celko 是后一种方法的倡导者。
        • 谢谢。我以前从未使用过 UUID() 。根据我在互联网上看到的大多数示例,它会创建长 ID,例如1E8EF774581C102CBCFEF1AB81872213 我说的对吗?如果是这样,有什么办法可以让这些更短?或者任何人都可以向我推荐一个更好地解释此功能的网站(我认为我不太了解它)?谢谢
        • @Sthe - 复合主键可能是您的解决方案。它是一个 auto_increment 索引,附加列也是整数类型。如果您将 id 字段设置为 auto_increment,则可以添加另一个名为 server_id 的字段,然后将主键定义为 PRIMARY KEY(id, server_id)。您的每台服务器都有一个数字来识别它(比如 1 到 10),然后您的 auto_increments 将照常工作,并由 server_id 区分。另一种方法是使用 UUID 生成的更长的值。
        【解决方案5】:

        mysql 自动递增作为用户 ID 使用安全吗?

        如果您的安全系统可靠,基本上可以。但一般来说,Web 开发人员对公开允许通过增加或减少数字来猜测其他 ID 的 ID 感到不舒服。许多人转而使用随机的多位数 ID。

        在一个更模糊的说明中,数字 ID 还可以让竞争对手通过跟踪增量价值的增长情况来估计您的增长。

        【讨论】:

        • 生成“随机、多位 ID”的最佳实践是否如 OP 所建议的那样?即:在服务器上生成ID,然后在分配之前确保它在数据库中不存在。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-24
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多