MySQL中的键,主键,唯一键和索引之间的区别


250

什么时候应该使用KEYPRIMARY KEYUNIQUE KEYINDEX


2
PRIMARY键用于标识行,防止插入具有相同数据的两行... INDEX键用于加速搜索(插入速度极慢)。列中唯一数据的UNIQUE键。
Hos Mercury


Answers:


303

KEYINDEX在MySQL的同义词。他们是同一回事。在数据库中,您将使用索引来提高数据检索的速度。的索引在使用柱通常创建JOINWHEREORDER BY条款。

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

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

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


2
我可以同时拥有唯一键和主键值吗?
帮助

58
@needHELP:如果您有一个passengers包含以下字段的表:(id, first_name, last_name, age, passport_number),通常会将该id列设置为主键。主键自动是唯一键。主要区别在于表上只能有一个主键,并且该列不能包含NULL值。无需将id列设置为,UNIQUE因为将其设置为主键可以自动保证其唯一性...然后,您也可以将其设置passport_numberUNIQUE不超过一名乘客...
Daniel Vassallo

32
...将能够拥有相同的护照号码。但是,您可能会有一些没有护照号码的乘客(例如,孩子)。在这种情况下,您可以NULL毫无问题地插入该列。
丹尼尔·瓦萨洛

2
@DanielVassallo我喜欢在MySQL使用的同义词之间清除它的方式。
SIFE 2013年

1
最好的解释之一。非常感谢:-)
Ravi Hirani

61

KEY和INDEX是同义词。

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

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

PRIMARY KEY既是唯一约束,也意味着该列为NOT NULL。它用于为每一行赋予一个标识。这对于通过外键约束与另一个表联接很有用。虽然不需要表具有主键,但这通常是一个好主意。


PRIMARY KEY用于给每一行赋予一个标识吗?为我的无知解释抱歉。
帮助

@needHELP:它用作唯一标识表中任何行的方法。例如,如果您要删除表中的特定行,则有一些方法可以明确地标识该行,这很有用,这样您就不会意外删除错误的行。这对于在索引中连接另一个表也很有用。
Mark Byers

48

首要的关键不允许NULL值,但唯一键允许NULL值。

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


17

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

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

INDEX也创造了独特性。MySQL(示例)将为被索引的列创建索引表。这样,当在该索引表列上查询查询时,检索表行值会更容易。缺点是,如果您进行许多更新/删除/创建,则MySQL必须管理索引表(这可能是性能瓶颈)。

希望这可以帮助。


另外,UNIQUE KEY可以是,NULLPRIMARY KEY不能为NULL
拉斐

10

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

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

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


我想你的意思是说有可能是在一个表中只有一个PK
的Răzvan弗拉菲乌斯熊猫

7

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

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


表中只有一个PRIMARY KEY,但是唯一键不止一个。
VIKASH 2012年

6

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

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


2

唯一键:

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

首要的关键

  1. 可以包含多个唯一键。
  2. 唯一表示一个元组。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.