14

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

我想知道以防万一我希望我的主键varchar在未来成为 a 。

4

6 回答 6

17

varchar只要确保每一个都是独一无二的,您就可以使用。然而,这并不理想(有关更多信息,请参阅下面的文章链接)。

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

学到更多:

于 2012-12-27T18:54:35.743 回答
10

为什么整数是好的主键

与字符串或复合键相比,使用整数进行索引通常更容易,因为它很适合将结果(概念上或实际上)视为数组。根据数据库实现的不同,整数的访问、排序或比较也可能更快,并且整数类型通常提供其他数据类型不具备的附加功能,例如自动递增。例如,您将如何自动增加复合键?

MySQL对主键有这样的说法:

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

SQL 允许将任何非空的唯一列(或列集)用作主键。但是,如果您不关心自动递增,您通常可以将主键设为唯一且非空的任何索引。

考虑您的应用程序的期望

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

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

于 2012-12-27T19:15:45.970 回答
1

主键是唯一的。int 很容易通过自动递增来满足该条件。如果将其设为 char,则必须创建一种方法来使其在添加数据时唯一。

于 2012-12-27T18:54:15.680 回答
1

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

于 2012-12-27T18:55:47.287 回答
1

主键为 Integer,更容易管理,索引更有效。如您所知,虽然键是自动索引的,但索引存储为二叉树,最适合遍历整数。将键设置为 int 没有任何限制,您也可以将其声明为 varchar。

于 2012-12-27T18:56:12.360 回答
1

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

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

于 2012-12-27T19:16:11.880 回答