mysql自动增量是否可以安全地用作userID?

时间:2011-11-10 11:37:48

标签: mysql auto-increment userid

我在网站上工作,允许人们在线创建个人资料。我想知道使用MySQL AUTO_INCREMENT ed ID作为我的用户ID是否是正确的选择。还要记住,有一天我可能不得不跨多个服务器复制数据库吗?

e.g。你会在Twitter或Facebook这样的网站上对userIds使用这种方法吗?


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

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是否还不存在。

有没有更好的方法?

5 个答案:

答案 0 :(得分:14)

  

mysql自动增量是否可以安全地用作userID?

如果您的安全系统可靠,基本上是的。但通常情况下,Web开发人员会感到不舒服,因为ID只允许通过递增或递减数字来猜测其他 ID。许多人使用随机的多位数ID。

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

我不知道这是不是最好的做法,但它确实有效。

答案 4 :(得分:0)

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