MySQL 基础知识

1. MySQL 基本架构

三大范式:
1NF: 属性不可分
2NF:属性完全依赖于主键
3NF:属性不依赖于其它非主属性

  1. 连接器:身份验证和权限相关
  2. 查询缓存:MySQL 8.0 的时候已近弃用,因为这个功能不太实用
  3. 分析器:如果缓存中没有的话,SQL 语句会经过分析器来分析改语句是用来干嘛的,检查语法是否正确
  4. 优化器:按照 MySQL 认为的最优的方案去执行
  5. 执行器:执行语句,从存储 引擎返回数据
  6. 存储引擎:主要负责数据的存储和读取,可替换

2. 事务

2.1 事务的特性 ACID

  • 原子性:保证多做要么全部完成,要么完全不起作用
  • 一致性:执行事务前后,数据保持一致
  • 隔离性:一个事务不被其它事务所干扰
  • 持久性:一个事务被提交后,它对数据库中的数据的改变是持久的

2.2 并发事务可能造成的问题

  • 脏读:一个事务正在修改数据,还没有提交,这个时候另一个事务也访问了这个数据,但是这个数据还没提交,所以是脏数据
  • 幻读:一个事务读取了几行数据,接着另一个事务插入了一些数据,在之后的查询过程中,第一个事务可能会发现一些 “不存在” 的数据,就是幻读
  • 不可重复读:在一个事务里多次读同一个数据,这个时候如果另外一个事务修改了这个数据,两次的数据就不一样,可能会发生不可重复度
  • 丢失修改:两个事务都读同一个数据,这个时候在两个事务都未提交之前,都修改了数据,先提交的事务可能就会丢失修改

2.3 事务的隔离级别

  • READ-UNCOMMITTED:允许读取未提交的数据变更,可能会有脏读、幻读、不可重复度
  • READ-COMMITED:允许读取并发事务已近提交的数据,可以阻止脏读,可能会有幻读、不可重复读
  • REPEATABLE-READ:默认值,对同一字段的多次读取结果都是一致的,除非是被自己的事务修改了,可以阻止脏读、不可重复读,可能会有幻读
  • SERIALIZABLE:所有事务依次执行
  • 在 InnoDB 情况下,可以使用 Next-Key Lock 算法保证在 REPEATABLE-READ 的情况下就解决幻读,select * from table for update

3. 存储引擎

3.1 MyISAM

  • 5.5 之前默认的存储引擎
  • 并发性和锁级别 (对于读写混合的操作不好,为表级锁,写入和读互斥)
  • 表损坏修复
  • MyISAM 表支持的索引类型(全文索引)
  • MyISAM 支持表压缩(压缩后,此表为只读,不可以写入。使用 myisampack 压缩)

3.2 InnoDB

  • 5.5 及之后默认的存储引擎
  • 支持事务
  • 完全的支持 ACID
  • Redo log(事务持久性)和 Undo log(事务的原子性,用于回滚)
  • 支持行级锁,可以最大程度地支持并发

3.3 其他

  • CSV:以 CSV 格式进行数据存储,列不能为 NULL,可以直接对数据文件进行编辑
  • Memory:数据存在内存中,重启数据会丢失;支持 hash 索引和 btree 索引,所有字段都为固定长度,使用表级锁

4. log

4.1 binlog

  • binlog 记录了数据库的表结构和表数据变更,不会记录 select
  • binlog 存储着每条变更 SQL 和事务 ID 等
  • 事务提交的时候才记录
  • 主要作用:
    • 复制:服务器需要与主服务器数据保持一致
    • 恢复:恢复数据

4.2 redo log

  • 修改的时候,写完内存了,还没到磁盘的时候磁盘挂了,这个时候可以根据 redo log 恢复
  • redo log 是顺序 IO,写入速度很快
  • redo log 记录的是物理变化(XX 页做了 XX 修改),体积很小
  • 作用是为了持久化而生的
  • 只有 InnoDB 有,在事务开始的时候就开始记录信息
  • MySQL 通过两阶段提交保证 binlogredo log 数据一致
    • InnoDB redo log 写盘,InnoDB 事务进入 prepare 状态
    • binlog 写盘,InooDB 事务进入 commit 状态
    • 每个事务 binlog 的末尾,会记录一个 XID event,标志着事务是否提交成功,也就是说,恢复过程中,binlog 最后一个 XID event 之后的内容都应该被 purge

4.3 undo log

  • 主要用来回滚和版本控制
  • 主要存储的是逻辑日志
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值