MySQL中PRIMARY KEY、UNIQUE KEY、KEY的区别

背景知识

  • key和index是一样的含义
    在 MySQL 中 KEY 和 INDEX 是同义。那这个问题就可以简化为 PRIMARY KEY,UNIQUE KEY 和 INDEX 的区别。而这三者也正好是索引的划分,主键索引,唯一索引和普通索引(INDEX)。
  • 使用
    使用 KEY 来加速从数据库中读取数据。KEY 通常加在那些 JOIN, WHERE,和 ORDER BY 子句的列上。
    (创建索引时,需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 实际上,索引也是一张表,该 表保存了主键与索引字段,并指向实体表的记录。)
  • 索引的缺点
    虽然索引提高了查询速度,却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更 新表时,MySQL不仅要保存数据,还要保存一下索引文件。

PRIMARY KEY 和 UNIQUE KEY 的区别

  1.  一张表只能有一个 PRIMARY KEY,但可以有很多 UNIQUE KEY。
  2. 当给一列设置为 UNIQUE KEY 之后,不能有两行在该列上有相同的数据。
  3. PRIMARY KEY 不允许有 NULL值,但是 UNIQUE KEY 可以。
  4. PRIMARY KEY 和 UNIQUE KEY 都是用来保证列上数据的为原型,都可以在一列或者多列上加。
  5. 同一张表 PRIMARY KEY 只能有一个, UNIQUE KEY可以有多个,PRIMARY KEY 不能有空值, UNIQUE KEY 可以有。如果 PRIMARY KEY 的1个或多个列为NULL,在增加PRIMARY KEY 时,列自动更改为 NOT NULL 。而UNIQUE KEY 对列没有要求是通过参考索引实施的,如果插入的值均为NULL,则根据索 引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值

总结和分类

  • PRIMARY KEY 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个 索引;
  • UNIQUE KEY 有两个作用,一是约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个索引;
  • KEY 有一个作用,在这个key上建立了一个索引;

使用

PRIMARY KEY (`列名`)
UNIQUE KEY (`列名`)
KEY `列名` (`列名`)

 

THE END