Mysql-一条更新语句要经历那些流程

1

1. Mysql客户端将SQl语句传入MysqlServer层

2. 将name=666的数据查找到,实际上,存储引擎去磁盘当中找到这条数据,并加载Buffer Pool当中然后将name=666所在行的数据name字段改为涛哥

3. 修改以后不会将修改结果直接修改进磁盘,而是将修改进内存当中,会等待刷脏

4. 记录Redo Log,记录Redo Log之后,并将这行记录状态改为prepare(准备状态),并没有commit

5. 修改了好了之后,可以提交事务

6. 生成操作Bin Log,并将Bin Log写入磁盘后

7. 存储引擎提交事务

8. 将Redo Log改为commit,事务完成

为什么Redo Log需要2阶段提交

Redo Log写入,Bin Log未写入:此时Mysql异常重启能根据Redo Log恢复name='涛哥’的数据。但Bin Log没有记录。后续使用Bin Log回复临时库,会出现数据丢失,导致状态不一致。

Bin Log写入,Redo Log未写入:此时Mysql异常重启能根据Bin Log重放name='涛哥’的数据。但Redo Log没有记录。重启后没有name='涛哥’的数据,会出现数据丢失,导致状态不一致。

### MySQL 查询解析 在MySQL中,当接收到一条SQL语句时,服务器会先通过分析器对其进行处理。此过程涉及两个主要部分:预处理与解析。在这个阶段,SQL语句被分解成其组成部分,如关键字(`SELECT`, `UPDATE`, `DELETE`, `WHERE`, `ORDER BY`, `GROUP BY`等)和其他元素,并构建出一个表示该命令结构的内部数据结构—即所谓的解析树[^1]。 对于相同的查询语句,如果存在任何形式上的差异,比如大小写的区别或是额外的空间字符,则会被视为两条独立的SQL指令对待,这意味着它们各自都需要经历完整的编译流程并生成各自的执行计划[^2]。 ### MySQL 的 SQL 执行顺序 通常情况下,标准SQL语句按照如下逻辑顺序被执行: 1. **FROM**: 首先确定操作的数据源; 2. **ON**: 如果有JOIN条件的话,在这里应用这些条件; 3. **OUTER**: 对于外连接而言,此时决定哪些记录应当保留下来; 4. **WHERE**: 接着过滤掉不符合特定条件的行; 5. **GROUP BY**: 将剩余的结果集按指定列分组; 6. **HAVING**: 进一步筛选基于聚合函数计算后的结果; 7. **SELECT**: 提取所需的字段或表达式的值; 8. **DISTINCT**: 去除重复项; 9. **ORDER BY**: 最终对输出结果排序; 10. **LIMIT/OFFSET**: 控制返回的最大数量以及偏移量; 需要注意的是上述步骤并非总是严格按照这样的物理执行次序来进行优化,实际运行过程中可能会有所调整以提高性能效率。 ### 操作符优先级 关于SQL内的运算符优先级,它遵循一定的层次关系,其中算术运算符具有较高的优先级别,而比较和逻辑运算符则相对较低一些。具体来说: - 算数运算 (`* / %`) > 加减法(`+ -`) - 比较运算 (e.g., `<`, `>`, `=`, `!=`, `<=`, `>=`) - 逻辑非 (`NOT`) - 逻辑与 (`AND`) - 逻辑或 (`OR`) 为了确保预期的行为模式,建议使用括号明确指出期望的操作序列[^4]。 ### SQL语法规范 编写清晰有效的SQL语句非常重要,良好的实践包括但不限于以下几个方面: - 使用统一的小写字母书写所有的SQL关键词,除非数据库对象名称本身含有大写字母; - 维持一致性,避免不必要的空白字符或换行符影响到SQL解释器的工作方式; - 当涉及到复杂的子查询或者其他嵌套结构的时候,适当利用缩进来增强可读性和维护性; - 正确引用标识符(例如表名、列名),特别是在跨多个架构的情况下更要注意这一点; - 利用注释来描述复杂查询的目的及其工作原理,方便后续理解和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我黄同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值