Mysql中的Primary,Unique和Index

时间:2013-12-20 08:27:45

标签: mysql indexing

任何人都可以解释Mysql的Primary,Unique和Index键之间的区别。你能解释一下不同情况下的每一个吗? ?

2 个答案:

答案 0 :(得分:2)

Primary是表的列的值或表的多个列的值的组合,我们可以使用它来标识每一行。例如,我们有一个表Customers,其中包含ID intFirstName varchar(50)LastName(50)列。然后ID列可用于标识用户,因此可以将其用作此表的PK。只有一个客户(如果存在的话)有ID = 4ID = 10等。

唯一值是表的列,每个单独的记录应具有唯一值。

索引键是表的列或列的组合,使执行对表的查询运行得更快。当一个表有很多记录,甚至一个简单的查询需要很长时间才能完成时,这很有用。

答案 1 :(得分:1)

是的,这些是不同的

KEY或INDEX是指正常的非唯一索引。允许索引的非不同值,因此索引可以包含索引的所有列中具有相同值的行。这些索引不会对您的数据施加任何限制,因此它们仅用于确保某些查询可以快速运行。

UNIQUE是指索引的所有行必须唯一的索引。也就是说,对于此索引中的所有列,同一行可能不具有与另一行相同的非NULL值。除了用于加速查询之外,UNIQUE索引还可用于强制限制数据,因为数据库系统在插入或更新数据时不允许破坏此不同值规则。

您的数据库系统可能允许将UNIQUE索引应用于允许NULL值的列,在这种情况下,如果两行都包含NULL值,则允许两行相同(这里的基本原理是NULL被认为不等于本身)。但是,根据您的应用程序,您可能会发现这是不受欢迎的:如果您希望阻止这种情况,您应该禁止相关列中的NULL值。

PRIMARY的行为与UNIQUE索引完全相同,只是它总是被命名为“PRIMARY”,并且表上可能只有一个(并且应该总是有一个;尽管某些数据库系统不强制执行此操作)。 PRIMARY索引旨在作为唯一标识表中任何行的主要方法,因此与UNIQUE不同,它不应在任何允许NULL值的列上使用。您的PRIMARY索引应该位于足以唯一标识行的最小列数上。通常,这只是一个包含唯一自动递增数字的列,但如果还有其他任何可以唯一标识行的列,例如国家/地区列表中的“countrycode”,则可以使用该列。

某些数据库系统(例如MySQL的InnoDB)会按照它们在PRIMARY索引中出现的顺序将表的记录存储在磁盘上。