我们来看看一条更新语句在MySQL内部是如何执行的?以及 binlog(归档日志)和redo log(重做日志)在其中所起的重要作用。 1.一条更新语句是如何执行的 相比查询语句的执行流程,更新语句的执行流程多了两个重要的日志模块: binlog(归档日志)和redo log(重做日志) 。上一...
我们来看看一条更新语句在MySQL内部是如何执行的?以及 binlog(归档日志)和redo log(重做日志)在其中所起的重要作用。
相比查询语句的执行流程,更新语句的执行流程多了两个重要的日志模块: binlog(归档日志)和redo log(重做日志) 。上一小节,我们介绍了这两个日志的基本概念,大家可能会有疑问,这两份日志,到底有啥区别?为什么会有两份日志呢?
刚开始MySQL自带的引擎是MyISAM,然而MyISAM并没有crash-safe的能力,而binlog只能用于数据归档。InnoDB引擎是另外一家公司开发的MySQL插件,同时开发了redo log来实现crash-safe能力。从5.5.5版本开始,InnoDB成为MySQL的默认存储引擎,也是当前最常用的存储引擎。
**Tips:**crash-safe指数据库发生故障重启,之前提交的数据不会丢失
update语句将id等于1这一行的value值加1
update a set value=value+1 where id=1;
表a拥有一个字段id和一个字段value
CREATE TABLE `a` (
`id` int(11) DEFAULT NULL,
`value` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我们来看看这条update语句在MySQL内部是如何执行的?
一条更新语句的执行过程,除了要经过连接池、查询缓存、解析器、优化器、执行器这几个模块之外,还涉及到两个非常重要的日志模块: binlog(归档日志)和redo log(重做日志)。
通过本文的讲解,希望您对MySQL的物理组成有更深入的认识。