关系数据可依赖于主键,主键在物理层面上主要有两个用途:

  1. 唯一的标识一行
    因为主键可以唯一标识一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。
  2. 作为一个可以被外键引用的对象
    一个表的主键通常可以作为另一个表的外键,主键通过与外键构成参照完成性约束,防止出现数据不一致。

主键分为单列主键和复合主键:

  • 单一主键:只用一列来唯一标识一行

    create table user(id varchar(4) primary key,  # 单列主键name varchar(4) not null, email varchar(20) not null ,efftflag varchar(1) not null
    )
    
  • 联合主键:当使用一列不能唯一表示一行的时候,就要采用多列唯一标识一行,就是复合主键
    create table uesr(id varchar(4) not null, name varchar(6) not null,email varchar(3) not null, efftflag varchar(1) not null, primary key(id ,name )  # 复合主键
    )
    

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

索引可以提高查询速度,它就相当于字典的目录,通过它可以很快查询到结果,而不需要进行全表扫描。但过多使用索引会降低更新表的速度,如对表进行INSERT, UPDATE和DELETE时,Msql不仅要保存数据,还要保存索引文件。

索引可分为单列索引和复合索引:

  • 单列索引:只有某一列作为索引,默认为index索引,这一列可以包含重复数据。如果某列不存在重复数据,最好设置成唯一索引unique形式,它比index的索引速度更快。
  • 复合索引:每次检索都需要使用多列进行时,可以把多列设为复合索引。根据多列是否唯一,也分为index索引和unique索引。
    【注意】对于复合索引:Mysql是从左到右使用索引中的字段,一个查询可以只是用索引的一部分,但必须是左侧部分。如索引是indexName(a,b,c),则可以支持a|a,b|a,b,c3种组合进行查找。

总体来说:主键相当于一本书的页码,索引相当于书的目录。

两者的比较:

  • 主键是一定是唯一性索引,但唯一性索引不一定是主键
    数据库管理系统对于主键自动生成唯一索引,所以主键是一个特殊的索引
  • 唯一索引标识索引值唯一,一个表可以有多个唯一索引,但主键只能有一个
  • 主键列不能为空,但唯一索引列可以为空
  • 一张表只能有一个主键,但可以有多个索引

参考博客:https://blog.csdn.net/qq_38724327/article/details/79880636

Mysql的主键和索引相关推荐

  1. 浅谈mysql的主键和索引

    在上一篇文章<count(1).count(*).count(字段)哪个更靠谱>中,我们提到过主键是优化不了count的查询效率的,需要建索引才可以,那么,是不是意味着主键的效率还不如一般 ...

  2. MySQL的主键,索引设置和添加

    PRI primary key 表示主键,唯一 写法: id bigint(20) unsigned primary key not null ,uni UNIQUE 表示唯一 写法 id bigin ...

  3. mysql联合主键是不是索引_MySQL:联合主键、索引

    MySQL数据库用联合主键.用两张表测试. # 1分钟数据表 CREATE TABLE md_1min2( `d_1min` DATETIME(3), `code` CHAR(16), `open` ...

  4. oracle 主键能加索引吗,Oracle 添加主键和索引

    数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率: 一.创建表的同时创建主键约束 (1)无命名 create table studen ...

  5. Oracle与Mysql主键、索引及分页的区别小结

    Oracle与Mysql主键.索引及分页的区别,学习oracle的朋友可以参考下 区别: 1.主键,Oracle不可以实现自增,mysql可以实现自增. oracle新建序列,SEQ_USER_Id. ...

  6. Mysql中主键和外键和索引

    Mysql中主键和外键和索引 1.主键和外键是什么 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是 ...

  7. MySQL 主键和索引

    主键:关系数据可依赖于主键,主键在物理层面上主要有两个用途: 唯一的标识一行 因为主键可以唯一标识一行记录,所以可以确保执行数据更新.删除的时候不会出现张冠李戴的错误. 作为一个可以被外键引用的对象 ...

  8. mysql中主键、普通索引、唯一索引和全文索引

    SQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录 开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录 ...

  9. MySQL主键与索引的联系和区别

    关系数据库依赖于主键,它是数据库物理模式的基石.主键在物理层上只有两个前途: 唯一地标识一行 作为一个可以被外键有效引用的对象 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分) ...

最新文章

  1. OD基本快捷键及功能
  2. php catch e是什么,php try catch 中的catch(Exception $e) 中的Exception 有什么作用?
  3. [error] MFC错误不能将参数1从const char [3]转换为const wchar_t *
  4. Linux系统7z文件解压
  5. python的代码在哪写_python代码在哪里编写
  6. Eclipse最常用快捷键
  7. Linux的使用和认识实验,通过一个小实验认识Linux vDSO
  8. Hibernate实体JSONObject化时遇到的问题
  9. 大型互联网分布式企业微服务云架构
  10. 修复ext4日志(jbd2)bug( Ext4 文件系统有以下 Bug)
  11. DxO FilmPack 5详细教程:对照片进行艺术渲染,使其具有专业电影的色彩和颗粒感
  12. Java反射之修改常量值
  13. 产品经理面试问题及答案大全《一》
  14. Java坦克大战代码
  15. 平衡车gazebo仿真
  16. 用户体验--NPS满意度指标
  17. 正则表达式(18)——字符串替换案例:UBB翻译
  18. 爱快路由游戏私服全开
  19. 一个开源vue网站博客,nuxt开源网站,前后端分离项目 1
  20. 安装一个apk引起的无法开机。

热门文章

  1. python练习-Python输出不重复的字符
  2. 如何让PPT的备注演示者看到而观众看不到
  3. 京东供应链溯源防伪平台
  4. 网上药店领导品牌_药康网
  5. 用Matlab的.m脚本文件处理实验室数据
  6. (谷歌)Chrome浏览器添加扩展程序白名单
  7. 【数据分析与挖掘】基于Apriori算法的中医证型的关联规则挖掘(有数据集和代码)
  8. 笔记本电脑合盖无法休眠,开盖黑屏
  9. Mac下Chrome的插件安装目录在哪?
  10. 如何让安卓手机访问内网服务器?