首页 > 其他分享 >主键、唯一键、普通索引

主键、唯一键、普通索引

时间:2022-12-25 21:22:58浏览次数:66  
标签:index unique 主键 索引 key 唯一 id

索引被用来快速找出在一个列上用一特定值的行。所有的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

相关文章

  • Elasticsearch全文检索引擎复习笔记
    Elasticsearch全文检索引擎复习笔记Elasticsearch是一个基于Lucene的搜索引擎。它提供了一个分布式、多租户的全文搜索引擎,能够为应用程序提供实时的、结构化和非结构......
  • ansible rhel-system-roles的出处和文档索引地址
    使用selinuxLinux系统管理的Ansible角色简介RHEL系统角色简介galaxylinux-system-roles......
  • Rest操作ES(1)-索引库操作、文档增删改查、批量写入
    1、初始化RestClient在elasticsearch提供的API中,与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中,必须先完成这个对象的初始化,建立与elasticsearch的连......
  • 深入理解 MySQL 索引底层原理
      一步一步推导出Mysql索引的底层数据结构。Mysql作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是Mysql数据的存储形式以......
  • 深入理解 MySQL 索引底层原理
      一步一步推导出Mysql索引的底层数据结构。Mysql作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是Mysql数据的存储形式以......
  • 深入理解 MySQL 索引底层原理
      一步一步推导出Mysql索引的底层数据结构。Mysql作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是Mysql数据的存储形式以......
  • MongoDB 索引原理与索引优化
    转载请注明出处:1.MongoDB索引索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种......
  • 搜索引擎的设计与实现(源码+PPT+论文)
    毕业设计说明书搜索引擎的设计与实现搜索引擎的设计与实现摘要: 我们处在一个大数据的时代,伴随着网络信息资源的庞大,人们越来越多地注重怎样才能快速有效地从海量的网络信息......
  • 通过地址和索引实现数组
    CPU会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。变址寄存器的值就相当于高级编程语言程序中数组的索引功能。数组是指同样长度的数据在内存中进行连续排列的......
  • 唯一索引
    ALTERTABLEt_factor_weightADDUNIQUEfid_fac_sym_unique_index(`fund_id`,`factor_name`,`symbol`);ALTERTABLEt_factor_target_positionADDUNIQUEfid_factor_......