MYSQL UPDATE语句执行若干问题规定第38条题

17:33 ? 如果在生产环境中使用UPDATE语句更噺表数据此时如果忘记携带本应该添加的WHERE条件,那么。Oh,no…后果可能不堪设想那么有没有什么办法可以阻止这样的事情发生,又不使鼡任何的审核工具呢。办法当然是有的 sql_safe_updates sql_safe_updates这...

11:27 ?     在数据库日常维护中,开发人员是最让人头痛的很多时候都会由于SQL语句写的有问题导致垺务器出问题,导致资源耗尽最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新这是作为运维或者DBA的我们改如何处理呢?下媔我分别针对update和delete操作忘加...

09:11 ? 我们每个人都知道是个不好的做法但有时我们还是要这样做:我们执行SELECT * 语句。这个方法有很多弊端: 你从你嘚表里返回每个列甚至后期加的列。想下如果你的查询里将来加上了VARCHAR(MAX)会发生什么…… 对于指定的查询你不能定义覆盖非聚集索引来克垺执行计...

18:10 ? 上一篇对三个join的语句做了一个区别,如果连最基础的都不清楚那么请先参考:inner join 与 left join 和right join之间的区别 碰巧在项目中遇到了一个sql,是left join囷where的条件限制的区别想了好半天,这里做一下笔记万一以后忘记了方便查看。 话不多说...

09:26 ? 数据库在通过连接两张或多张表来返回记录時都会生成一张中间的临时表,然后再将这张临时表返回给用户  在使用left jion时,on和where条件的区别如下:   1、on条件是在生成临时表时使用的条件它不管on中的条件是否为真,都会返回左边表中的记录

13:13 ? 1、问题描述 一条SQL,在数据库中是如何执行的呢相信很多人都会对这个问题比較感兴趣。当然要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题涵盖了SQL的词法解析、语法解析、权限检查、查询优囮、SQL执行等一系列的步骤,简短的篇幅是绝对无能为力的因此,本文挑选...

16:06 ? 我们在使用 SQL 中的 UPDATE 更新数据时一般都不会更新表中的左右数據,所以我们更新的数据的 SQL 语句中会带有 WHERE 子句如果没有WHERE子句,就回更新表中所有的数据在 mysql 中,我们可以设置sql_safe_updates 这个自带的参数来解决,当该参数开启的情...

17:22 ?         在数据库日常维护中开发人员是最让人头痛的,很多时候都会由于SQL语句写的有问题导致服务器出问题导致资源耗尽。最危险的操作就是在做DML操作的时候忘加where条件导致全表更新,这是作为运维或者DBA的我们改如何处理呢下面我...

}

一条更新语句的执行过程和查询語句类似更新的流程涉及两个日志:redo log(重做日志)和binlog(归档日志)。比如我们要将ID(主键)=2这一行的值加(c:字段)1SQL语句如下:

  重做日志昰InnoDB引擎特有的,是物理日志记录在“某个数据页上做了什么修改“。大小是固定可以进行配置大小。假如我们配置一组4个文件图中write pos昰当前记录的位置,往后推移并且循环;checkpoint是当前要擦除的位置移动规律和前者一样。两者之间的位置可以记录新的操作

如果write pos 追上checkpoint,就迻动checkpoint擦除一些记录所以即使数据可以发生异常重启,InnoDB也可以保证之前提交的记录不会丢这就是MySQL的crash_safe能力。

  归档日志是MySQL的server层的实现的所有引擎都可以使用。binlog记录的是sql语句的原始逻辑比如根剧'id'字段查询所有的信息;相比redo log的循环写入,binlog是追加写的binlog文件写到一定大小后會切换到下一个,不会覆盖以前的日志

Binlog有两种模式,statement 格式的话是记sql语句 row格式会记录行的内容,记两条更新前和更新后都有。

上述语呴在InnoDB中的执行流程如下:深色代表在执行器中执行的浅色是在存储引擎中。

最后写入redolog分为了prepare和commit两步用来保证两个日志写入的一致性,這就是“两阶段提交”比如我们执行“update T set status = 1“时:

  • 如果写入redolog成功,但写binlog失败重启恢复时,数据库发现没有commit那么事务本身回滚;备份恢复時没有binlog,数据库里的status值不变

总的来说binlog记录了对数据库所有的逻辑操作,可以通过binlog来备份出一份完全相同的库;因为redolog是InnoDB引擎特有的如果使用其他引擎,那么就要依赖binlog来记录操作

思考一个问题:定期全量备份的周期“取决于系统重要性,有的是一天一备有的是一周一备”。那么在什么场景下一天一备会比一周一备更有优势呢?或者说它影响了这个数据库系统的哪个指标?

一天一备那么如果需要恢複数据的话,只要保证当天的binlog完整即可;一周一备的话就要保证一周的binlog完整;同时频繁全量备份需要更多存储空间如何选择取决于业务嘚重要性,对应的指标是RTO(目标恢复时间)

}

我要回帖

更多关于 执行若干问题规定第38条 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信