我在网站上工作,允许人们在线创建个人资料。我想知道使用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是否还不存在。
有没有更好的方法?
答案 0 :(得分:14)
mysql自动增量是否可以安全地用作userID?
如果您的安全系统可靠,基本上是的。但通常情况下,Web开发人员会感到不舒服,因为ID只允许通过递增或递减数字来猜测其他 ID。许多人使用随机的多位数ID。
在一个更加模糊的说明中,数字ID还可以让竞争对手通过跟踪增量值的增长来估计您的增长。
答案 1 :(得分:4)
不,这不是一个好主意,因为auto_increment id不易移植。对于您的用户ID,您需要可以在数据库实例之间进行备份,还原,移动等的ID,而不必担心ID的冲突。
最好使用UUID之类的东西生成唯一的数字或字母数字字符串。
答案 2 :(得分:2)
鉴于您正在计划提前并且可能会跨数据库分发数据,您最好考虑使用UUID()函数来获取唯一标识符。这使得将来更容易合并数据。
答案 3 :(得分:0)
但是,如果您要同时在多个数据库上运行它们并且它们没有被复制,那么您需要一些其他方式来生成ID以避免获取具有相同ID的行(尽管我无法想到你会这样做的场景。)
我不知道这是不是最好的做法,但它确实有效。
答案 4 :(得分:0)
是如果你删除一行说id为7,则自动增量的下一个值将是8而不是7。所以所有的价值肯定都是独一无二的。并且您需要截断表以再次开始自动增量。因此,您始终可以为用户ID使用自动增量字段。