mysql中key 、primary key 、unique key 与index区别详解

mysql中key 、primary key 、unique key 与index区别详解
最新回答
危險人物

2026-06-20 21:20:39

MySQL中Key、Primary Key、Unique Key与Index的区别如下:

Key与Primary Key的区别
Key是索引约束的统称,用于加速查询,分为单列索引(如KEY tid (tid))和多列索引(如KEY forum (status,type,displayorder))。Primary Key是特殊的Key,具有唯一性且不允许NULL值,每个表只能有一个Primary Key。例如,PRIMARY KEY (logrecord_id)定义了表的主键,而KEY wh_logrecord_user_name (user_name)仅为普通索引。Primary Key会自动创建唯一索引(Unique Index),无需额外定义。

Key与Index的区别
Key属于逻辑设计层面,用于描述表结构(如主键、外键约束),而Index是物理实现层面的工具,用于优化查询性能。Key通常是Index的同义词,但Primary Key在逻辑上称为“键”,物理上自动创建唯一索引。例如,对user_name字段定义KEY后,查询条件包含该字段时可利用索引加速。Index可对任意列创建,而Key需通过Primary/Foreign/Unique等约束实现。

Unique Key与Primary Key的区别

  1. NULL值处理:Primary Key的列必须为NOT NULL,若未显式定义,MySQL会隐式设置为NOT NULL;Unique Key允许NULL值,且多个NULL值不视为重复(如UNIQUE KEY date (date,hash)允许(NULL,NULL)重复插入)。
  2. 数量限制:一个表只能有一个Primary Key,但可定义多个Unique Key(如UNIQUE KEY uc_PersonID (Id_P,LastName))。
  3. 索引类型:Primary Key自动创建唯一索引,而Unique Key需显式定义,两者均通过索引实现唯一性约束。

Unique Key的用途
Unique Key主要用于防止数据重复插入,适用于需要唯一性但非主键的场景(如用户邮箱、订单号)。创建方式包括:

  • 建表时定义:UNIQUE (Id_P)或CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)。
  • 修改表时添加:ALTER TABLE Persons ADD UNIQUE (Id_P)或ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)。
  • 撤销约束:ALTER TABLE Persons DROP INDEX uc_PersonID。

总结
Primary Key是表的主标识符,兼具唯一性和非空性;Unique Key确保数据唯一性但允许NULL;Key是索引的统称,涵盖Primary/Foreign/Unique等约束;Index是物理优化工具,通过索引结构加速查询。设计表时,应优先定义Primary Key,再根据业务需求添加Unique Key或普通Index。