索引被用来快速找出在一个列上用一特定值的行。所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。
参考:https://www.cnblogs.com/zjfjava/p/6922494.html
- 主键索引(必须指定为“PRIMARY KEY”,没有PRIMARY Index)
- 唯一索引(unique index,一般写成unique key)
- 普通索引 (index,只有这一种才是纯粹的index)等,也是基于是不是把index看作了key,比如 create table t(id int, unique index inx_tx_id (id));--index当作了key使用
注:KEY和INDEX
----------------------------------------------------
注:mysql的key是同时具有constraint和index的意义
key 是数据库的物理结构,它包含两层意义和作用,包括primary key, unique key, foreign key 等。
- 一是约束(偏重于约束和规范数据库的结构完整性),
- 二是索引(辅助查询用的)
index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等;
因此,索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)。
----------------------------------------------------
主键:primary key
- 主键用于唯一标识表中的每一条数据
- 一个表只能有一个主键
- 不能重复, 不能为空
- 主键可以是1个或多个字段组成
- auto_increment的字段必须是主键, 但是主键不一定是auto_increment的
使用原则:
- 最少性: 尽量选择一个字段作为主键
- 稳定性: 尽量选择更新少的字段作为主键
在理论上建议尽量选择整数类型的字段作为主键,通常搞一个id字段类型为int, 设置自动增长, 作为主键;但是作为分布式系统,这种自增整数类型的主键并不能保证全局的唯一性,所以实际上我们的应用都是以分布式seqence构成的字符串作为主键。
唯一键:unique key
- 避免添加重复数据, 也就是说如果想保证某一个字段的值永远不重复, 那么就可以将这个字段设置为唯一键
- 唯一键不是主键, 主键有一个特点是不能重复, 但是唯一键不等于主键
- 一张表中只能有一个主键, 但是一张表中可以有多个唯一键
- 唯一键也可以是1个或多个字段组成
示例:
CREATE TABLE `apsc_common_idempotent` ( `idempotent_id` varchar(64) NOT NULL COMMENT '主键', `biz_type` varchar(32) NOT NULL COMMENT '业务类型', `biz_id` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '记录ID', PRIMARY KEY (`idempotent_id`), UNIQUE KEY `uk_common_idempotent` (`biz_id`, `biz_type`) BLOCK_SIZE 16384, )
标签:index,unique,主键,索引,key,唯一,id From: https://www.cnblogs.com/chihaoyuIsnotHere/p/17004616.html