数据库主键必须是整数吗?

时间:2012-12-27 18:52:20

标签: mysql primary-key

我总是将MySQL数据库主键视为整数。这是因为主键必须是整数,还是因为在列上设置auto_increment时易于使用?

我想知道以后我希望我的主键在将来成为varchar

6 个答案:

答案 0 :(得分:10)

您可以使用varchar,只要确保每个唯一。但这并不理想(有关详细信息,请参阅下面的文章链接)。

您正在寻找的是自然键,但是具有自动增量并由RDBMS处理的主键称为代理键,这是首选方式。因此,您需要将其设为整数

了解详情:

答案 1 :(得分:10)

为什么整数会成为好的主键

与字符串或复合键相比,使用整数进行索引通常更容易,因为它很适合将结果(在概念上或在实践中)作为数组处理。根据数据库实现,整数也可以更快地访问,排序或比较,整数类型通常提供其他功能,如自动递增,这些功能不适用于其他数据类型。例如,如何自动递增复合键?

关于主键的

MySQL has this to say

  

表的主键表示您在最重要的查询中使用的列或列集。它具有关联的索引,以实现快速查询性能。查询性能受益于NOT NULL优化,因为它不能包含任何NULL值。

SQL允许将任何非null,唯一列(或列集)用作主键。但是,如果您不关心自动递增,通常可以使主键any index为UNIQUE而非NULL。

考虑您的应用程序的期望

虽然不是硬性要求,但某些框架针对整数主键进行了优化。例如,Ruby on Rails默认使用自动递增主键。如果你想使用不同的东西,你必须故意违反惯例。

这并不意味着应该或不应该使用整数作为主键。它只是意味着主键的选择部分由您的底层数据库系统和您希望针对它运行的查询驱动,部分由您希望用于检索数据的应用程序驱动。在考虑候选人密钥时,应考虑所有这些因素。

答案 2 :(得分:1)

主键是unique.int很容易满足自动增量的条件。如果你使它成为char,你必须创建一种方法,使你在添加数据时使其唯一。

答案 3 :(得分:1)

不,主键不必是整数;这是非常普遍的。例如,我们这里的用户ID可以有前导零,因此必须存储在varchar字段中。该字段用作Employee表中的主键。

答案 4 :(得分:1)

要使主键成为Integer,更易于管理,并使其索引更有效。 如您所知,虽然键是自动索引的,但索引存储为二叉树,这对于遍历中的整数最佳。 将密钥设为int是没有限制的,你可以将它声明为varchar。

答案 5 :(得分:1)

基本上,主键只需要满足2个条件:它必须是非空列,并且必须是唯一的。可以将任何尊重此2条件的类型列设置为主键。如果主键是多列一列,则两列都不需要为空。

虽然理论上你可以使用其他字段作为主键,但整数是最容易管理的,也是最快的索引。