不经过悉心栽培,花儿开不出鲜艳的花朵;不经过时间的历练,幼苗长不成参天大树。

Mysql中主键(Primary Key)、外键(Foreign Key)、唯一键( Unique Key)、索引(Index)的说明

database 建伟 7879℃ 0评论

本文主要介绍Mysql几种键和索引:

MySQL中有三种Key和一个Index: Primary Key(主键), Unique Key(唯一键),Foreign Key(外键)和 Index(索引)

四者的区别如下:
定义:
主键(Primary Key):唯一标识一条记录,不能有重复,不允许为空。
外键(Foreign Key):表的外键是另一表的主键, 外键可以有重复, 可以是空值。
唯一键( Unique Key):唯一标识一条记录,不能有重复,可以为空。
索引(Index):该字段可以有重复值记录,可以有空值,如果是唯一索引,那么就不可以有重复的记录,可以有空值。

作用:
主键:用来保证数据完整性。
外键:用来和其他表建立联系,以保证数据的一致性和级联操作。
唯一键:用来用防止数据插入的时候重复。
索引:是提高查询排序的速度。

个数:
主键:一个表只能有一个列是主键。
外键:一个表可以有多个列是外键。
唯一键:一个表可以有多个列是唯一键。
索引:一个表可以有多个列是索引。

从中可以看出,索引和唯一键很相似,二者的区别在于作用不同,索引用于提高查询速度,唯一键用于唯一约束。当然如果建立的索引是唯一索引的话,也可以起到唯一约束的作用。在MySQL具体实现上,索引需要建立数据结构,需要额外的磁盘空间来存储索引,而键(主键,外键和唯一键)都是逻辑层面的实现和约束,二者还是有着本质的区别。

还有就是MySQL的索引包括:普通索引(Index)、唯一索引(UNIQUE INDEX)、全文索引(FULLTEXT INDEX)、组合索引。这里就不要把唯一键和唯一索引弄混淆了!也不要把索引和其它的三种键弄混淆了。

还有一点需要注意的是,虽然键(key)和索引(index)有着本质的区别,但是当我们在建立主键或者唯一键的时候,也就建立了索引,MySQL和Oracle都是这么做的,要是不明白这一点,很容易把索引和主键和唯一键弄混淆。

唯一键可以起到唯一约束的作用,当然主键也可以起到唯一约束的作用。当然我们可以不建立唯一键和主键,直接为指定的数据表的列添加唯一约束。唯一约束保证指定列的值不能重复。

所以,关于上面的概念,大家不要咬文嚼字,而是根据功能去理解每一种KEY的作用,在什么场合需要去使用它。

比如需要主键约束的时候,我们就可以对某一列建立主键;
需要对某一列或者多个列进行唯一约束的时候,我们就建立唯一键或者唯一约束;
需要加快查询速度的时候,我们就建立相应类型的索引。

关于四者的理解,上未参考到权威的资料,请读者保持怀疑的态度接受。

转载请注明:Li Jianwei's Blog » Mysql中主键(Primary Key)、外键(Foreign Key)、唯一键( Unique Key)、索引(Index)的说明

喜欢 (6)or分享 (0)
web技术交流群
22765697