数据库知识汇总

数据库知识汇总

  • 数据库架构
  • 范式理论
    • 第一范式
      • 非第一范式:
      • 第一范式:
    • 第二范式
      • 第一范式:
      • 第二范式:
    • 第三范式
      • 第二范式
      • 第三范式
    • BCNF范式
      • 第三范式
      • BCNF范式
  • sql语句
  • 索引
    • 为什么要使用索引
    • 什么样的信息能成为索引
    • 索引的数据结构
    • 稀疏索引和密集索引
    • 如何调优sql
    • MyISAM和Innodb关于锁方面的区别
    • 数据库事务的四大特性
    • 事务隔离级别及各级别下的并发访问问题
      • 更新丢失
      • 脏读 read uncommitted
      • 多次读取同一数据,数据不一致 read committed
      • 幻读 read repeatable
      • 串行 serial
    • Innodb可重复读隔离级别下如何避免幻读
      • 当前读和快照读
    • RC、RR级别下的Innodb的非阻塞读如何实现

数据库架构

如何设计一个关系型数据库?
数据库知识汇总_第1张图片

范式理论

数据库知识汇总_第2张图片
部分函数依赖:
数据库知识汇总_第3张图片
传递函数依赖:
数据库知识汇总_第4张图片

第一范式

非第一范式:

一个元素一列对应多个属性

姓名 兴趣爱好
李四 篮球 象棋

存在的问题:数据混乱

第一范式:

一个元素一列只有一个属性

姓名 兴趣爱好
李四 篮球
李四 象棋

第二范式

第一范式:

每个人只能有一种兴趣,假设不存在姓名和年龄相同的人
存在部分依赖:

姓名 年龄 兴趣爱好 兴趣类型
李四 19 篮球 球类
李四 18 象棋 棋类

由部分依赖导致的问题:

  1. 冗余数据:兴趣类型依赖兴趣爱好,兴趣类型冗余
  2. 插入异常:如果一种兴趣爱好比如足球,暂时没有人喜欢,就不能将“足球 球类"关系插入表中
  3. 删除异常:如果一种兴趣爱好比如篮球,李四不再喜欢,将会把"篮球 球类"的对应关系也删除
  4. 修改异常:如果修改一种兴趣爱好的类型,比如“篮球 球类”修改为"篮球 户外球类",需要修改所有的兴趣爱好为篮球的行

第二范式:

姓名 年龄 兴趣爱好
李四 19 篮球
李四 18 象棋
兴趣爱好 兴趣类型
篮球 球类
象棋 棋类

第三范式

第二范式

非主属性传递依赖
每个人只能有一种兴趣

姓名 兴趣爱好 兴趣类型
张三 篮球 球类
李四 足球 球类
王五 象棋 棋类

姓名->兴趣 -> 类型

由于传递依赖产生问题:

  1. 冗余数据:兴趣类型依赖兴趣爱好,兴趣类型冗余
  2. 插入异常:如果一种兴趣爱好比如足球,暂时没有人喜欢,就不能将“足球 球类"关系插入表中
  3. 删除异常:如果一种兴趣爱好比如篮球,李四不再喜欢,将会把"篮球 球类"的对应关系也删除
  4. 修改异常:如果修改一种兴趣爱好的类型,比如“篮球 球类”修改为"篮球 户外球类",需要修改所有的兴趣爱好为篮球的行

第三范式

姓名 兴趣爱好
张三 篮球
李四 足球
王五 象棋
兴趣爱好 兴趣类型
篮球 球类
足球 球类
象棋 棋类

BCNF范式

https://baike.baidu.com/item/bcnf/9446795?fr=aladdin#4

第三范式

每名教练只能教一种兴趣爱好

姓名 兴趣爱好 教练
张三 篮球 王五
张三 足球 周七
李四 足球 赵六

姓名+兴趣爱好->教练
姓名+教练->兴趣爱好
教练->兴趣爱好

上面满足第三范式,但是依旧存在下面的问题:

  1. 冗余数据:兴趣类型依赖教练,教练和兴趣爱好信息冗余
  2. 插入异常:如果一种兴趣爱好和教练比如‘象棋 许银川’,暂时还没有人喜欢,就不能将“象棋 许银川"关系插入表中
  3. 删除异常:如果一种兴趣爱好比如篮球,张三不再喜欢,将会把"篮球 王五"的对应关系也删除
  4. 修改异常:如果修改一个教练教的兴趣爱好,比如“篮球 王五”修改为"羽毛球 王五",需要修改所有王五的兴趣爱好为羽毛球

BCNF范式

姓名 教练
张三 王五
张三 周七
李四 赵六
兴趣爱好 教练
篮球 王五
足球 周七
足球 赵六

sql语句

https://www.cnblogs.com/diffrent/p/8854995.html

索引

为什么要使用索引

https://blog.csdn.net/lichundongv5/article/details/79611994

什么样的信息能成为索引

区分度较高

索引的数据结构

B+树
https://blog.csdn.net/qq_35008624/article/details/81947773

稀疏索引和密集索引

https://blog.csdn.net/dgutliangxuan/article/details/87895680

如何调优sql

  1. 查询慢查询sql日志 show variables like ‘slow_query_log_file’
  2. explain sql 重点关注:type,extra
  3. 尽量让sql走索引,避免走全表

数据库知识汇总_第5张图片

MyISAM和Innodb关于锁方面的区别

数据库知识汇总_第6张图片
数据库知识汇总_第7张图片

数据库事务的四大特性

  1. 原子性
  2. 一致性
  3. 隔离性
  4. 持久性

事务隔离级别及各级别下的并发访问问题

更新丢失

数据库知识汇总_第8张图片

脏读 read uncommitted

多次读取同一数据,数据不一致 read committed

幻读 read repeatable

串行 serial

数据库知识汇总_第9张图片

Innodb可重复读隔离级别下如何避免幻读

当前读和快照读

数据库知识汇总_第10张图片

RC、RR级别下的Innodb的非阻塞读如何实现

数据库知识汇总_第11张图片
数据库知识汇总_第12张图片
数据库知识汇总_第13张图片

你可能感兴趣的:(mysql,研发基本知识总结)