MySQL中key、primary key、unique key、index的区别

本文深入解析MySQL中键(Key)与索引(Index)的概念及其差异,涵盖PrimaryKey、UniqueKey、ForeignKey的作用与特点,以及它们如何影响数据库的结构完整性和查询性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、key

CREATE TABLE `phpcolor_ad` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`type` mediumint(1) NOT NULL,
`code` text,
PRIMARY KEY (`id`),
KEY `type` (`type`)
);

最后一句的KEY `type` (`type`)是什么意思?

如果只是key的话,就是普通索引。mysql的key和index多少有点令人迷惑,单独的key和其他关键字结合的key(primary key)实际表示的意义是不同的。key是数据库的物理结构,它包含两层意义和作用。一是约束(偏向于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key、unique key、foreign key等。

1、primary key

primary key有两个作用,一是约束作用,用于规范一个存储主键和唯一性,但同时也在此key上建立了一个主键索引。

primary key约束:

  • 唯一标识数据库中的每条记录
  • 主键必须包含唯一的值
  • 主键列不能包含null值
  • 每个表有且只能有一个主键

2、unique key

unique key也有两个作用,一是约束作用,规范数据的唯一性 ,但同时也在这个key上建立了一个唯一索引。

unique key约束:

  • 唯一标识数据库表中的每条记录
  • 每个表可以有多个unique key约束
  • unique key主要用来防止数据插入的时候重复的

3、foreign key

foreign key也有两个作用,一是约束作用(constraint),规范数据的引用完整性,但同时也在这个key上建立了一个index。

可见mysql的key是同时具有constraint和index的意义。

代码实例:

CREATE TABLE `admin_role` (
  `adminSet_id` varchar(32) NOT NULL,
  `roleSet_id` varchar(32) NOT NULL,
  PRIMARY KEY (`adminSet_id`,`roleSet_id`),
  KEY `FK9FC63FA6DAED032` (`adminSet_id`),
  KEY `FK9FC63FA6C7B24C48` (`roleSet_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

主键、两个列组合在一起,是唯一的,内建唯一性索引,并且不能为NULL

两个KEY定义,相当于分别对这两列建立索引

key的用途主要是用来加快查询速度的


二、index

index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间以一个类似目录的结构存储。索引要分类的话分为前缀索引、全文本索引等。因此,索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)。

三、MySQL中Index与Key的区别

Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key),外键(Foreign Key)等,用于数据完整性检否与唯一性约束等。

而Index则处于实现层面,比如可以对表的任意列建立索引,那么当建立索引的列处于SQL语句中的Where条件中时,就可以得到快速的数据定位,从而快速检索。

至于Unique Index,则只是属于Index中的一种而已,建立了Unique Index表示此列数据不可重复,猜想MySQL对Unique Index类型的索引可以做进一步特殊优化吧。 


于是乎,在设计表的时候,Key只是要处于模型层面的,而当需要进行查询优化,则对相关列建立索引即可。 

另外,在MySQL中,对于一个Primary Key的列,MySQL已经自动对其建立了Unique Index,无需重复再在上面建立索引了。 

搜索到的一段解释: 


    Note that “primary” is called PRIMARY KEY not INDEX. 
    KEY is something on the logical level, describes your table and database design (i.e. enforces referential integrity …) 
    INDEX is something on the physical level, helps improve access time for table operations. 
    Behind every PK there is (usually) unique index created (automatically). 

四、MySQL中unique key和primary key有什么区别

  1. Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而Unique key对列没有此要求。
  2. 一个表只能有一个Primary key,但可以有多个Unique key
  3. Unique key主要用来防止插入重复数据

转载自:https://blog.youkuaiyun.com/nanaMasuda/article/details/52543177

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值