侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 144654 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

MySQL导图

2024-02-21 星期三 / 0 评论 / 0 点赞 / 3 阅读 / 4058 字

特性:存储引擎架构,将查询处理及其他系统任务和数据的存储、提取相分离 1.1 MySQL逻辑架构 第一层:连接/线程处理 第二层:查询缓存、解析器、优化器 包括查询解析、分析、优化、缓存以及内置还函数

特性:存储引擎架构,将查询处理及其他系统任务和数据的存储、提取相分离

1.1 MySQL逻辑架构

第一层:连接/线程处理

第二层:查询缓存、解析器、优化器

包括查询解析、分析、优化、缓存以及内置还函数,存储过程、触发器、视图

第三层:存储引擎

数据的存储和提取

1.1.1 连接管理与安全性

认证、权限

1.1.2 优化与执行

优化器不关心表使用什么存储引擎

查询缓存 -> 解析查询并创建解析数 -> 优化(重写查询、表的读取顺序、合适的索引)  hint explain

1.2 并发控制

1.2.1 读写锁

共享锁、排它锁

1.2.2 锁粒度

每种存储引擎都可以实现自己的锁策略和锁粒度

表锁、行级锁

1.3 事务 ACID

原子性:不可分割、全部成功或者全部失败回滚

一致性:一个一致性状态转换到另一个一致性状态

隔离性:通常来说一个事务所做的修改提交以前对其他事务不可见。 隔离级别

持久性:一旦事务提交,其所做的修改就会永久保存在数据库中

根据业务是否需要事务处理来选择合适的存储引擎

1.3.1 隔离级别

READ UNCOMMITTED 未提交读:事务中的修改及时没有提交对其他事务也是可见的,脏读

READ COMMITTED 提交读:不可重复读

REPEATABLE READ:同一个事务中多次读取同样记录的结果是一致的,默认事务隔离级别

幻读:

事务1 查询id=1是否存在,不存在插入id=1的记录

select * from User where id = 1;  
insert into `User`(`id`, `name`) values (1, 'A');  

事务2 插入id=1的记录
insert into ` User`(`id`, `name`) values (1, 'B');  

当事务1查询id=1不存在后,事务2插入了id=1的记录,此时事务1再插入就会主键冲突

SERIALIZBLE 可串行化

1.3.2死锁

死锁检测和死锁超时机制

InnoDB:将持有最少行级排它锁的事务进行回滚

1.3.3 事务日志

追加的方式

事务日志持久化,内存中修改的数据在后台慢慢刷回到磁盘

1.3.4 MYSQL中的事务

自动提交模式 set autocommit = 1  1或者ON启用

设置隔离级别 set transaction isolation level

InnoDB 两阶段锁定协议:加锁、解锁,无法解决死锁  COMMIT ROLLBACK

显示锁定 select ... lock in share mode   select ... for update 

1.4 多版本并发控制 MVCC

保存数据在某个时间点的快照

InnoDB 每行记录后面保存两个隐藏的列,一个保存行的创建系统版本号,一个保存行的删除系统版本号。每开始一个新的事务,系统版本号自动递增

(1)DB_TRX_ID,6字节,记录每一行最近一次修改它的事务ID;

(2)DB_ROLL_PTR,7字节,记录指向回滚段undo日志的指针;

(3)DB_ROW_ID,6字节,单调递增的行ID;

普通锁 串行   

读写锁 读读并发  

多版本 读写并发

redo日志用于保障已提交事务的ACID特性

undo日志用于保障未提交事务不会影响ACID

1.5 MySQL存储引擎

表的定义.frm文件  服务层统一处理

show table status

1.5.1 InnoDB存储引擎

间隙锁锁定间隙,防止间隙被其他事务插入,不可重复读

临界锁锁定索引记录+间隙防止幻读

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

广告 广告

评论区