MySQL中键、主键、唯一键和索引的区别

什么时候我应该使用KEYPRIMARY KEYUNIQUE KEYINDEX?

229441 次浏览

KEY和INDEX是同义词。

当性能测量和EXPLAIN显示查询由于缺少索引而效率低下时,您应该添加索引。添加索引可以提高查询的性能(但会降低对表的修改速度)。

当您希望将该列(或多个列)中的值限制为惟一时,应该使用UNIQUE,以便尝试插入重复的值会导致错误。

PRIMARY KEY不仅是唯一的约束,而且它还暗示该列为NOT NULL。它用于为每一行提供一个标识。这对于通过外键约束连接另一个表非常有用。虽然一个表不需要有PRIMARY KEY,但这通常是一个好主意。

KEYINDEX是MySQL中的同义词。它们是同一个意思。在数据库中,你可以使用索引来提高数据检索的速度。索引通常创建在JOINWHEREORDER BY子句中使用的列上。

假设你有一个名为users的表,你想要搜索所有姓为“Smith”的用户。如果没有索引,数据库将不得不遍历表的所有记录:这是很慢的,因为数据库中的记录越多,查找结果需要做的工作就越多。另一方面,索引将帮助数据库快速跳转到“Smith”记录所在的相关页面。这与我们人类通过电话簿目录查找某个人的姓氏非常相似:我们不会从头到尾地搜索,只要我们按某种顺序插入信息,就可以快速跳到“S”页。

主键和唯一键类似。主键是可以唯一标识一行的列或列的组合。它是唯一键的特殊情况。一个表最多可以有一个主键,但可以有多个唯一键。在列上指定唯一键时,表中任何两个不同的行都不能具有相同的值。

还要注意,定义为主键或唯一键的列在MySQL中会自动建立索引。

PRIMARY KEYUNIQUE KEY是相似的,只是它们的函数不同。主键使表行唯一(即不能有两个具有完全相同键的行)。一个数据库表中只能有一个主键。

唯一键使表行中的表列是唯一的(即,没有两个表行可能具有完全相同的值)。您可以有多个唯一键表列(不像主键,这意味着表中只有一个表列是唯一的)。

INDEX也创建唯一性。MySQL(示例)将为被索引的列创建索引表。这样,在对索引表列查询查询时,更容易检索表行值。缺点是,如果你做很多更新/删除/创建,MySQL必须管理索引表(这可能是一个性能瓶颈)。

希望这能有所帮助。

唯一键:没有两行相似的列

主键:能唯一标识表中每一行的最小列数的集合(即构成主键的所有列中没有相似的两行)。一个表中可以有多个主键。如果存在唯一键,那么它就是表中的主键(而不是“主键”)。如果不存在唯一键,则需要多个列值来标识一行,例如(first_name, last_name, father_name, mother_name)可以在某些表中构成主键。

索引:用于优化查询。如果你要搜索或排序的基础上的一些列的结果很多次(例如。大多数人会通过名字而不是他们的卷号来搜索学生),那么如果列的值都被“索引”了,比如用二叉树算法,就可以优化。

主键 -我们只能在一个表中放入一个主键,当我们向表中输入值时,我们不能让该列为空。

唯一键 -我们可以在一个表中放置多个唯一键,并且在向表中输入值时可以将该列留空。 列取唯一值(不相同)当我们应用primary &独特的关键。< / p >

主键不允许NULL值,但唯一键允许NULL值。

我们可以在表中声明只有一个 主键,但表可以有多个 独特的钥匙(列赋值)。

主键用于处理不同的表。这是关系数据库的基础。如果你有一个图书数据库,最好创建2个表- 1)图书和2)作者,INT主键“id”。然后在books中使用id而不是作者的名字。

如果不希望有重复的条目,则使用唯一键。例如,您可能在图书表中有标题,并希望确保每个标题只有一个条目。

唯一密钥:

  1. 可以有多个值为空。
  2. 任何两个元组在唯一键中都不能有相同的值。
  3. 一个或多个唯一键可以组合成一个主键,反之则不行。

主键

  1. 可以包含多个唯一键。
  2. 唯一表示一个元组。