什么时候我应该使用键,主键,唯一键和索引?


当前回答

KEY和INDEX是同义词。

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

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

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

其他回答

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

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

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

希望这能有所帮助。

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

Primary Key: Collection of minimum number of columns which can uniquely identify every row in a table (i.e. no two rows are similar in all the columns constituting primary key). There can be more than one primary key in a table. If there exists a unique-key then it is primary key (not "the" primary key) in the table. If there does not exist a unique key then more than one column values will be required to identify a row like (first_name, last_name, father_name, mother_name) can in some tables constitute primary key.

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

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

在一个表中只能声明一个主键,但是一个表可以有多个唯一键(列赋值)。

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

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

KEY和INDEX是同义词。

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

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

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