MySQL:我的用户ID应该是从1开始的INT自动递增主键吗?

时间:2010-10-08 14:14:08

标签: mysql

我是一名初级程序员,正在建立一个非商业性的网站。

我需要一个用户ID,我认为使用带有自动增量的简单INTEGER字段是合乎逻辑的。那有意义吗?用户不会直接使用用户ID(他们必须选择用户名);我应该关心他们从哪里开始(大概是1)?

我应该在构建“用户”表时加入哪些其他最佳做法?

谢谢!

JDelage

6 个答案:

答案 0 :(得分:7)

您的设计是正确的。您的内部PK应该是无意义的数字,系统用户看不到并自动维护。如果它从1开始并不重要,如果顺序与否,或者如果序列中有“漏洞”则无关紧要。 (对于您 向最终用户公开号码的情况,有时候这些号码既不是连续的也不是完全填充的,以便它们无法猜测)。

用户应该使用另一个有意义的信息(例如电子邮件地址)向系统表明自己的身份。这条信息应该保证唯一(使用UNIQUE索引),否则你的前端必须提供消歧的界面。

这种设计的好处包括:

  1. 可以通过更新一个表的一个记录中的一个值来更改帐户的有意义的标识符,而不是要求在数据库周围进行更新。

  2. 您的PK值会在数据库中出现很多次,是一个小而有效的索引整数,而您的面向用户的标识符可以是您想要的任何类型,包括冗长的文本字符串。

  3. 如果应用程序需要歧义,您可以使用非唯一标识符。

答案 1 :(得分:3)

auto_increment没问题。 但是,你不应该关心它的特定数字 非常相反,您永远不应该关注标识符的特定值。 Take仅作为抽象标识符。

虽然我怀疑它对用户来说是不可见的。你还有另一个标识符吗? Auto_inqrement标识符通常也可供用户看到。例如,您的ID是98361,没有人隐藏它。使用这些数字非常方便,唯一并且不变,永远绑定到特定的表行,它将始终识别相同的事物(用户或文章等)。

答案 2 :(得分:1)

是的,这是正确的。通常,自动增量从1开始。通常不接受将0作为ID。

如果您要存储密码,请不要将其存储为明文,请使用md5(最常用)或其他哈希。

答案 3 :(得分:1)

是的,自动递增很好,可能你也会保存密码,确保它们有某种保护,散列(md5)或加密就好了。

答案 4 :(得分:1)

还要确保索引要用于执行查找的列,例如电子邮件等...以避免全表扫描。

答案 5 :(得分:1)

自动递增字段很好,除非您需要执行诸如跨多个数据库共享此ID之类的操作,否则您可能需要自己创建id值。还要注意导出和导入数据。如果您不小心,将重新分配所有id值。

通常我会避免自动递增字段,因此我可以更好地控制id值的生成方式。这并不是说我关心价值只是他们是独一无二的。这些是最终用户永远不会看到的内部值。