繁体   English   中英

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

[英]Difference between Key, Primary Key, Unique Key and Index in MySQL

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

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

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

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

另请注意,定义为主键或唯一键的列会在 MySQL 中自动编入索引。

KEY 和 INDEX 是同义词。

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

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

PRIMARY KEY 既是唯一约束,也暗示该列不是 NULL。 它用于为每一行提供一个身份。 这对于通过外键约束与另一个表连接很有用。 虽然表不需要具有 PRIMARY KEY,但它通常是一个好主意。

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

我们只能在一张表中声明一个主键,但一张表可以有多个唯一键(列分配)。

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

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

INDEX也创造了独特性。 MySQL(示例)将为被索引的列创建一个索引表。 这样,在该索引表列上查询查询时,可以更轻松地检索表行值。 缺点是如果你做很多更新/删除/创建,MySQL 必须管理索引表(这可能是一个性能瓶颈)。

希望这会有所帮助。

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

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

索引:用于优化查询。 如果您要根据某个列多次搜索或排序结果(例如,大多数人将按姓名而不是他们的卷号搜索学生),那么如果列值全部为“索引”,例如使用二叉树算法。

主键- 我们只能将表上的一个主键放入表中,并且在将值输入表中时不能将该列留空。

唯一键- 我们可以在一张表上放置多个唯一键,当我们将值输入到表中时,我们可以将该列留空。 当我们应用主键和唯一键时,列采用唯一值(不相同)。

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

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

唯一键:

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

主键

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM