MyS# MySQL实战45讲(1)QL实战45讲(1)

第一讲,一条SQL查询语句是如何执行的

select * from T where ID=10

MySQL可以分成Server层和存储引擎两个部分

  1. Server层

  2. 引擎层:InnoDB,MyISAM,Memory

连接器:负责与客户端建立连接

查询缓存:如果某个语句查过了,就直接返回(不建议使用)

分析器:对SQL语句做语法分析,识别表,字段等

优化器:在执行前,对SQL语句做优化,索引,关联顺序

执行器:先看有没权限,然后利用引擎提供的接口查询

第二讲,日志系统

redo log(Innodb引擎层特有的)

WAL:write ahead logging,先写日志,再写磁盘

check_point指向要写到磁盘的,write_pos指向要写的地方

bin log

与redo log的区别:

  • bin log是server层的,所有引擎都可以用
  • redo log 是物理日志,bin log是逻辑日志
  • redo log是类似循环队列,bin log是追加的

两阶段提交

为了让redo log和bin log逻辑一致

  • redo log先写完,然后处于prepare阶段
  • 等bin log写完后,redo log再提交

第三讲,事务隔离

ACID:原子,一致,隔离,持久

事务遇到的问题:脏读,不可重复的,幻读

隔离级别

  • 读未提交:还没提交就能被看到
  • 读已提交:提交后才能看到
  • 可重复读:一个事务看到的数据,跟他启动看到的一样
  • 串行:字面意思

如何实现不同的隔离级别:MVCC

每条记录有一个或者多个read-view,作为不同的版本

不同的事务在不同的隔离级别下看到的不一样

posted @ 2022-08-08 22:00  Destiny233  阅读(58)  评论(0)    收藏  举报