1. 唯一索引 (unique)

ALTER TABLE `table_name` ADD UNIQUE (`email`);

什么是唯一索引?

唯一索引是这样一种索引,它通过确保表中没有两个数据行具有完全相同的键值来帮助维护数据完整性。

换个说法,有了唯一索引就可以确保数据表不会有相同行数据(组成唯一索引键的列).

唯一索引允许空值的存在,空值将视为。如果由单列组成唯一索引,则此列仅允许一个空值存在;如果由多列组成唯一索引,则值与空值的组合仅允许一个存在。

1.1 唯一键约束

什么是唯一键约束?唯一键约束与唯一索引又有什么区别?

唯一键约束与唯一索引的区别只有一个:唯一键约束不允许空值的存在,而唯一索引是允许空值的存在的。

2. 非唯一索引 (普通索引 index)

ALTER TABLE `table_name` ADD INDEX idx_email (`mobile`);

# 组合索引 遵循最左前缀原则
ALTER TABLE `table_name` ADD INDEX idx_bid_cid (`business_id`, `customer_id`);

非唯一索引,顾名思义,不约束列的唯一性,仅仅是为加速数据查询速度用的。又叫普通索引,应当为经常出现在查询条件 where 或排序条件 order by的列建立普通索引。

3. 主键索引 (primary key)

ALTER TABLE `table_name` ADD PRIMARY KEY (`id`);

主键索引,是一种特殊的唯一索引(不允许有空值)。

数据表通常用一列或多列来唯一标识行数据,这一列或多列就是主键。

Q:主键索引与唯一索引有啥区别呢?
A:1. 主键不允许空值存在的;2. 一个表仅有一个主键。

参考

  1. 主键和唯一索引的区别
  2. 唯一索引和非唯一索引