Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库主键必须是整数吗?_Mysql_Primary Key - Fatal编程技术网

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

Mysql 数据库主键必须是整数吗?,mysql,primary-key,Mysql,Primary Key,我总是将MySQL数据库主键视为整数。这是因为主键必须是整数,还是因为在列上设置auto\u increment时易于使用 我在想万一将来我希望我的主键是一个varchar。主键是唯一的。int通过自动递增很容易满足这个条件。如果你将它设置为char,你就必须创建一种方法,在你添加数据时使它唯一。你可以使用varchar,只要你确保每一个都是独一无二的。但这并不理想(更多信息请参见下面的文章链接) 您正在寻找的是自然键,但具有自动递增功能并由RDBMS处理的主键称为代理键,这是首选方法。因此,您

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


我在想万一将来我希望我的主键是一个
varchar

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

你可以使用
varchar
,只要你确保每一个都是独一无二的。但这并不理想(更多信息请参见下面的文章链接)

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

了解更多信息:


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

主键为整数时,更易于管理,并使其索引更有效。 正如您所知,虽然键是自动索引的,但索引存储为二叉树,这对于遍历整数来说是最好的。 将一个键设置为int没有任何限制,您也可以将其声明为varchar。

为什么整数是好的主键 与字符串或复合键相比,使用整数进行索引通常更容易,因为它能够很好地将结果(概念上或实际上)作为数组处理。根据数据库实现的不同,整数的访问、排序或比较速度也可能更快,整数类型通常提供其他数据类型所不具备的自动递增等附加功能。例如,如何自动递增复合键

关于主键:

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

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

考虑应用程序的期望值 虽然这不是一个硬性要求,但有些框架针对整数主键进行了优化。例如,RubyonRails在默认情况下促进了自动递增主键的使用;如果你想使用不同的东西,你必须故意违反惯例


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

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


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

感谢您提供链接。我现在完全明白了:)