首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL Update执行流程解读

一、update跟踪执行配置 使用内部程序堆栈跟踪工具path_viewer,跟踪mysql update 一行数据的执行过程,配置执行脚本:call_update.sh DROP DATABASE...::prepare(THD*) --引用消解 Sql_cmd_update::precheck(THD*) --更新语句实际执行的引用消解 Sql_cmd_update::execute_inner...(THD*) --SQL引擎层,调用存储引擎接口执行 Sql_cmd_update::update_single_table(THD*) optimize_cond --执行优化器优化路径...(THD*, bool) innoDB关键更新执行过程 ha_innobase::update_row: row_get_prebuilt_update_vector calc_row_difference...三、执行总结 update执行流程 1.执行语句连接数据库 2.分析器通过词法、语法分析知道这是一条更新语句 3.优化器确定执行路径 4.执行器具体执行,找到这一行,更新数据,然后通过Inodb存储具体更新操作

2K20
您找到你想要的搜索结果了吗?
是的
没有找到

proc 编程执行 insert、delete、update语句

主题中提到的三种语句都是没有返回值的,所以我们实现起来也最简单,下面代码中包含了 insert、update 和 delete 三种语法的使用。...值得注意的是在 insert 和 update 的时候使用宿主变量时的语法,在宿主变量前一定要加冒号,这是初学者最容易犯的错误。...} printf("update success......\\n"); // 对上面执行的操作执行一次提交 EXEC SQL commit; // 删除 dept 表中 deptno 为 50 的数据 EXEC SQL delete from dept where...表中的原有如下数据: 执行我们的程序(注意,在程序执行前,你要操作的数据必须都是真正提交到数据库中的,如果操作了未commit的数据,那么程序就会卡住不动): 执行后再次查看数据库:

30020

MySQL Update语句是怎么执行的?

MySQL Update语句是怎么执行的?...[isd2tnp037.png] 昨天,我们利用这张图,了解了一个select语句的执行过程,讲解了连接器、查询缓存、分析器、优化器、执行器等模块的作用,今天我们来看一条update语句是怎么执行的...其实,update语句的执行过程和select语句差不多,但是在update语句执行的过程中,MySQL新增加了两个重要的日志模块,他们分别是redo log(重做日志)和binlog(二进制日志、也可以称之为归档日志...b、执行器拿到Innodb存储引擎接口给的数据,执行update操作,得到新的数据,然后调用Innodb存储引擎的接口写入数据。...然后告知执行执行完成了,随时可以提交事务。 d、执行器生成update操作的binlog,并把binlog写入磁盘。

4.4K40

PHP使用mysqli同时执行多条sql查询语句的实例

PHP数据库操作中,mysqli相对于mysql有很大的优势,建议大家使用;之前我们有介绍过如何在PHP5中使用mysqli的prepare操作数据库,使用mysqli更是支持多查询特性,请看下面这段php...php $mysqli = new mysqli("localhost","root","","123456"); $mysqli- query("set names 'utf8'"); //多条sql...($sql)){//使用multi_query()执行一条或多条sql语句 do{ if ($rs = $mysqli- store_result()){//store_result()方法获取第一条...()方法获取下一结果集,返回bool值 } $mysqli- close(); //关闭数据库连接 ?...通过上面的例子,相信大家都可以很容易地明白了,在使用的时候要特别注意的是multi_query()执行多条语句时,语句之间是用 ; 隔开的,否则会出现错误。

3.2K30

从 MySQL 执行 update 报错 ERROR 1292 说起

DBA之路(ID: JiekeXu_IT) 如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA) 大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 MySQL 执行...事情是这样的,上周五下班前通过自动化工具执行开发人员事先写好的 SQL 时,自动化工具执行失败了,于是手动去生产环境执行,就发生了错误 “ERROR 1292 (22007): Truncated incorrect...PRIMARY KEY (`sequence_no`), UNIQUE KEY `u_t_ar_busi_contract_01` (`id`), ); 然后使用客户端可视化工具、Xshell 命令行执行均出现一样的报错...上面图中“update t set id=‘6’ and c=‘6’ where d=1;”和“update t set id=‘6’ and c=‘1’ where d=1;” 都执行成功了,但是更新成功的值却不一样...在我的 Oracle 23c 的测试环境中,我去模拟了上面的操作,直接执行此 SQL 就报错了,ORA-00920 操作无效。

49920

PHP中的MySQLi扩展学习(一)MySQLi介绍

只面向过程 不支持 存储过程 、 多语句执行 、 预处理语句 PHP7 中已经删除了并且完全不支持 然后是 PDO 。...仅支持面向对象方式使用 可以连接多种数据库,切换数据库带来的变更少,甚至可能不用修改代码 支持 存储过程 、 多语句执行 、 预处理语句 最后就是 MySQLi 。...支持面向对象和面向过程两种写法 仅支持 MySQL 数据库 支持 存储过程 、 多语句执行 、 预处理语句 跟随 PHP 及 MySQL 的版本更新,可以更快速地支持更多的 MySQL 高级特性 从它们三个的这些特点来看...$mysqli = mysqli_connect("localhost", "root", "", "blog_test");$res = mysqli_query($mysqli, "SELECT *...() 函数来执行语句,接着又使用面向对象的方式来获取结果集。

2.9K00

PHP中的MySQLi扩展学习(一)MySQLi介绍

只面向过程 不支持 存储过程 、 多语句执行 、 预处理语句 PHP7 中已经删除了并且完全不支持 然后是 PDO 。...仅支持面向对象方式使用 可以连接多种数据库,切换数据库带来的变更少,甚至可能不用修改代码 支持 存储过程 、 多语句执行 、 预处理语句 最后就是 MySQLi 。...支持面向对象和面向过程两种写法 仅支持 MySQL 数据库 支持 存储过程 、 多语句执行 、 预处理语句 跟随 PHP 及 MySQL 的版本更新,可以更快速地支持更多的 MySQL 高级特性 从它们三个的这些特点来看...$mysqli = mysqli_connect("localhost", "root", "", "blog_test"); $res = mysqli_query($mysqli, "SELECT...mysqli_query() 函数来执行语句,接着又使用面向对象的方式来获取结果集。

2.9K20

update执行流程(MySQL redo log和binlog详解)

test set score = 3 where id = 2; update语句也需要经过连接器、分析器、优化器、执行器,但是update语句相比select语句还是有很大不同的,更新流程设计两个重要的日志模块...真正的将日志写入到redo log文件(ib_logfile+数字)是在执行commit语句的时候执行。...UPDATE语句的执行流程 update test set score = 3 where id = 2; 整个update语句中牵涉到写redo log和binlog,并且redo log在前,binlog...-- score原始值为1 update test set score = 3 where id = 2; 假设我们的update语句在写完redo log,binlog还没写时系统发生了crash。...-- score原始值为1 update test set score = 3 where id = 2; 假设我们的update语句在写完binlog,redo log还没写时系统发生了crash。

1.7K10

PHP中的MySQLi扩展学习(四)mysqli的事务与预处理语句

所以在这里,我们就不再多讲理论方面的东西了,直接上代码来看看 MySQLi 中这两大特性与 PDO 在使用上的区别。 事务处理 首先,我们还是要让 MySQLi 对于错误的语句也报出异常来。...而在 MySQLi 中,我们则需要指定 MySQLi_Driver 对象中的报错属性为抛出异常,很明显,MySQLi_Driver 就是 MySQLi 的驱动对象。...// 使用异常处理错误情况 $driver = new mysqli_driver(); $driver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT...try { // 开始事务 $mysqli->begin_transaction(); $mysqli->query("insert into tran_innodb (name...; $username = 'aaa'; $stmt->bind_param("s", $username); // 绑定参数 $stmt->execute(); // 执行语句 $aUser = $

2.4K00

执行update语句,用没用到索引,区别大吗?

前言: 我们都知道,当执行 select 查询语句时,用没用到索引区别是很大的,若没用到索引,一条 select 语句可能执行好几秒或更久,若使用到索引则可能瞬间完成。...那么当执行 update 语句时,用没用到索引有什么区别呢,执行时间相差大吗?本篇文章我们一起来探究下。...其中 col1 字段区分度较高,del 字段区分度很低,下面我们分别以这两个字段为筛选条件来执行 update 语句: # 以 col1 字段为筛选条件 来更新 col2 字段 mysql> explain...2.一些经验总结 我们试着来解释下以上实验结果,首先来看下 update SQL 执行流程,大致如下: 首先客户端发送请求到服务端,建立连接。...也就是说,执行更新语句首先需要将被更新的记录查询出来,这也就不难理解为啥以区分度较高的字段为筛选条件进行更新,有索引的情况下执行更快。

1.2K40

一条Update语句的执行过程是怎样的?

前言通过本文主要了解Sql执行流程,包括两个问题:MySQL的一条Select语句是怎么运行的MySQL的一条Update语句是怎么运行的先看第一个问题,这里做个简单描述 ,因为我们着重还是看UpdateMySQL...优化阶段:基于查询成本的考虑, 选择查询成本最小的执行计划;执行阶段:根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端相对于Select,内容更多和更复杂的是Update语句的执行,...Update执行逻辑先把我画的图看完,图中步骤比较多,需要花点时间看,你想我画这个肯定花了更长时间,如果觉得还不错的话,谢谢点赞收藏下,不足的话大家指正下!...语句,对应一条相反的UPDATE的undo logBinLog 是Server实现的逻辑日志,用于复制和恢复数据,记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等)WAL...二阶段提交,顾名思义,会包含 2 个阶段:prepare 阶段,协调器会询问所有执行器,是否可以提交事务commit 阶段,协调器会通知执行器进行提交操作update执行阶段也用到了,比如:prepare

34811
领券