ChihiroBlog

数据库学习记录(基本概念)

1. 数据库基础

1.1表

  • 左外连接与内连接的区别

    • 内连接:显示两个表符合条件的数据
    • 左外连接:左表显示全部,右表匹配条件则显示,不匹配以NULL值填充
  • SQL执行顺序

    • from --> join...on --> where --> group by --> 聚合函数 --> having --> select --> distinct --> order by --> limit

1.2视图

  • 伪表:数据来源于原表,本身不存储数据

  • 对视图的增删改操作都是在操作原表数据

    • 视图最大的目的是为了辅助查询,所以一般不对视图做增删改操作。设置为只读视图

    • create view 视图名称 as select 语句

  • 作用

    • 辅助查询,提升查询性能

    • 屏蔽敏感数据

    • 主分同步

1.3存储过程

  • 概念:是一组为了完成特定功能的SQL语句集合。例如:转账

  • 一般禁止使用存储过程,银行系统可能会用

1.4触发器

  • 概念:一种特殊的存储过程

  • 作用:在对表中数据做增删改操作之前或者之后的时机,触发一些事件【如:记录日志、数据校验等】


2. 存储引擎

  • 2.1.InnoDB

    • 默认的存储引擎

    • 支持事务、支持物理外键【一般不用】

    • 天生支持行锁、手动支持表锁

    • 使用聚簇(集)索引:1.索引跟数据在同一个文件(表名.ibd);2.只有主键索引是聚簇索引,其他索引是非聚簇索引

  • 2.2.MyISAM

    • 不支持事务、不支持外键

    • 只支持表锁,不支持行锁

    • 使用非聚簇索引:索引跟数据不在一个文件


3. 索引

  • 概念:一种排好序,能够提升查询性能的数据结构

  • 分类:

    • 聚簇(集)索引【主键索引】:索引和行数据都在一个叶子节点上
    • 非聚簇(集)索引【非主键索引】:索引对应存储的数据是主键值
  • 底层选择B+树的原因:

    • 非叶子节点和叶子节点存储的数据不一样,非叶子节点存储的索引和指针仅占14B,可以使用尽量深度低的树存储大量的数据,树的深度越低,查询的次数就越少,性能就越高

    • 叶子节点是一个双向链表,支持范围查询,也能够提升访问效率

  • 主键索引

    • InnoDB引擎的表一定需要主键,如果不创建,数据库会自动创建并维护一个主键索引。创建主键的列建议是没有业务意义的列

    • 推荐使用主键自增:
      1、因为插入的数据始终会放在最后面,可以快速的找到插入的位置,无需做额外的开销,如移动数据的位置,旋转树等;
      2.如果不是自增,那么就无法判断要插入的数据具体是插入到索引树的哪个一位置,所以也无法判断树中数据的变化与树的旋转。那么就会带来不必要的开销。

  • 非主键索引

    • 普通索引:在普通字段上建立索引

    • 唯一索引:给唯一列创建索引

    • 联合索引:给主键以外的多个列创建索引,也叫联合索引【组合索引

    • 全文索引:ES

  • 创建索引的要求

    • 单表索引不超过5个

    • 联合索引的字段不超过5个

    • 经常增删改的字段不适合创建索引

    • 枚举值字段不适合创建索引

    • 不经常修改,经常查询的字段适合创建索引

    • 大长度的字段,可以设置前缀索引(为字段的前几个字符建立索引)

  • 创建索引语法

    • 主键索引

      命名要求:pk_列名

    • 普通索引

      语法:create index 索引名称 on 表名(具体的列名)

      命名要求:idx_列名

    • 唯一索引

      语法:create unique index 索引名称 on 表名(列名)

      命名要求:uk_列名

    • 联合索引

      语法:create index 索引名称 on 表名(列1,列2)

      命名要求:idx_列1_列2

posted on 2025-03-09 20:50  Chihirooo  阅读(12)  评论(0)    收藏  举报

导航