我们可以使用任何其他唯一约束作为数据库中的主键,如电话号码或国家ID

时间:2016-07-27 12:15:13

标签: mysql database

我正在创建一个包含个人手机号码列的数据库。现在我只是想知道没有为id创建一个单独的列并使其成为主键,我可以将此列作为此表的主键吗?

2 个答案:

答案 0 :(得分:1)

如上所述,您在技术上可以使用电话号码作为主键,但这不是最佳做法,因为:

  1. 您将无法插入恰好拥有相同电话号码的其他用户(主键必须是唯一的)。
  2. 您将遇到所谓的"更新异常",如果您有其他表引用您的表主键,并且您决定更改用户的手机号码,您将还必须更新所有相关表格中的手机号码。How to maintain referential integrity
  3. 从性能角度来看,数值上的索引通常比varchars上的索引更有效,并且会提高连接的性能,索引占用的空间也会更少。
  4. 通常情况下,最好的办法是使用自动递增的代理键。

答案 1 :(得分:0)

从技术上讲,您可以将任何列定义为主键。问题是这样的定义是好还是坏。如果您要使用电话号码(应该存储为字符串),并且该列不仅是主键而且也是唯一的,并且您将确保不会尝试插入两次相同的号码不同的人,那应该没问题。