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

MySQL Update执行流程解读

一、update跟踪执行配置 使用内部程序堆栈跟踪工具path_viewer,跟踪mysql update 一行数据的执行过程,配置执行脚本:call_update.sh DROP DATABASE...(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...row_update_for_mysql row_upd_step row_upd --执行更新 btr_pcur_t::restore_position rec_get_offsets_func...三、执行总结 update执行流程 1.执行语句连接数据库 2.分析器通过词法、语法分析知道这是一条更新语句 3.优化器确定执行路径 4.执行器具体执行,找到这一行,更新数据,然后通过Inodb存储具体更新操作

2K20

MySQL Update语句是怎么执行的?

MySQL Update语句是怎么执行的?...其实,update语句的执行过程和select语句差不多,但是在update语句执行的过程中,MySQL新增加了两个重要的日志模块,他们分别是redo log(重做日志)和binlog(二进制日志、也可以称之为归档日志...当我们执行一个update的SQL时,MySQL会干如下几件事情: a、执行器查找指定记录,如果记录所在的数据页在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。...b、执行器拿到Innodb存储引擎接口给的数据,执行update操作,得到新的数据,然后调用Innodb存储引擎的接口写入数据。...然后告知执行执行完成了,随时可以提交事务。 d、执行器生成update操作的binlog,并把binlog写入磁盘。

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

MySQL 执行 update 报错 ERROR 1292 说起

执行 update 报错 ERROR 1292 ,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!...事情是这样的,上周五下班前通过自动化工具执行开发人员事先写好的 SQL 时,自动化工具执行失败了,于是手动去生产环境执行,就发生了错误 “ERROR 1292 (22007): Truncated incorrect...mysql> update t_busi_cont set busi_contract_file='ba42cfdb-a1d0-4e5a-c' and busi_contract_file_ct=1...mysql> update t_busi_cont set busi_contract_file='ba42cfdb-a1d0-4e5a-c' where id='7823dcaade9145cdb8702d537...上面图中“update t set id=‘6’ and c=‘6’ where d=1;”和“update t set id=‘6’ and c=‘1’ where d=1;” 都执行成功了,但是更新成功的值却不一样

42620

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.6K10

【面试题精讲】mysql-update语句执行流程

执行 update 语句时,MySQL 会根据条件筛选出需要更新的记录,然后逐行修改记录中的数据。 2. 为什么需要 update 语句? update 语句的存在,体现了数据库的动态性。...update 语句的执行流程大致如下: 解析 SQL 语句:对给定的 update 语句进行解析,提取表名、操作字段(列名)、更新值、条件等信息; 锁定表:为了保证数据的一致性,在 update...6. update 语句的缺点 数据一致性风险:在多用户并发操作的情况下,update 语句可能导致数据不一致,需要时刻注意事务及锁机制; 执行速度受影响:当更新的记录数量较大时,update...语句的执行速度可能会受到影响。...在多条件查询中,注意使用 合适的索引,以提高 update 语句的执行速度。

16620

MySQL数据库执行Update卡死问题解决

执行数据库更新update操作的时候数据库卡死了 问题分析 一般都是数据库事务未提交,导致update或者delete卡死。...那么应该是数据库在执行数据操作失败 or 事务未提交 之后,将需要执行的sql语句锁死了。...update操作 update car set color ='银色' where id = 1; update car set color ='红色' where id = 1; 查询正在执行的事务:...SELECT * FROM information_schema.INNODB_TRX; 根据图中事务的线程ID(trx_mysql_thread_id)可以看出对应的mysql 线程:一个1084...(update正在等待锁)另一个是1089(update 正在执行 没有提交事务) 可以使用mysql命令杀掉线程:kill 线程id kill 1089; 期间如果并未杀掉持有锁的线程:则第二个update

1.9K20

【面试题精讲】mysql-update语句执行流程

执行 update 语句时,MySQL 会根据条件筛选出需要更新的记录,然后逐行修改记录中的数据。 2. 为什么需要 update 语句? update 语句的存在,体现了数据库的动态性。...update 语句的执行流程大致如下: 解析 SQL 语句:对给定的 update 语句进行解析,提取表名、操作字段(列名)、更新值、条件等信息; 锁定表:为了保证数据的一致性,在 update...6. update 语句的缺点 数据一致性风险:在多用户并发操作的情况下,update 语句可能导致数据不一致,需要时刻注意事务及锁机制; 执行速度受影响:当更新的记录数量较大时,update...语句的执行速度可能会受到影响。...在多条件查询中,注意使用 合适的索引,以提高 update 语句的执行速度。

18510

一文看懂MySQL执行update更新语句的流程

如果掌柜没有粉板,每次记账都翻账本,效率是不是低死啦? MySQL也有这个问题,若每次更新操作都写进磁盘,然后磁盘也要找到对应记录,然后再更新,整个过程IO成本、搜索成本都很高。 何解?...binlog MySQL Server层,它主要做的是MySQL功能层面的事情 引擎层,负责存储相关的具体事宜 粉板redo log是InnoDB引擎特有的日志,而Server层也有自己的日志,称为...看执行器和InnoDB引擎在执行这个简单的update语句时的内部流程。 执行器先找引擎取id=2这行。id是主键,引擎直接用b+树搜索。...假设当前ID=2的行,字段c的值是0,再假设执行update语句过程中,在写完第一个日志后,第二个日志还没有写完期间发生crash?...建议设成1,保证MySQL异常重启之后binlog不丢失 参考 MySQL 实战 45 讲

3.3K10

mysql存储过程的学习(mysql提高执行效率之进阶过程)

1:存储过程: 答:存储过程是sql语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理;存储过程存储在数据库内,可以由应用程序调用执行,而且允许用户声明变量以及进行流程控制,存储类型可以接受参数...,可以接受输入类型的参数,也可以接受输出类型的参数,并且可以存在多个返回值,因为存储过程的效率要比单一的sql语句执行效率高很多; 注意:存储过程执行效率之所高,在于普通的sql语句,每次都会对语法分析...,编译,执行,而存储过程只是在第一次执行语法分析,编译,执行,以后都是对结果进行调用。  ...2:存储过程的优点: 答: (1)增强sql语句的功能与灵活性[可以完成复杂的判断和较复杂的运算]; (2)实现较快的执行速度[如果某一个操作包含大量的sql语句,都会执行分析,编译,执行,由于存储过程是预编译的...,所以当第一次调用存储过程的时候,执行语法分析,编译,执行,将结果存储到内存中,以后直接调用结果即可]; (3)减少了网络流量[提交到服务器的数据较少,相当于减少网络流量]; 3:创建存储过程的语法如下所示

2.4K61

MySQL insert or update sql

MySQL 一条 sql 实现数据保存变更 insert or update ,如果没有执行insert,有就update 需要 有主键 PRIMARY 或 唯一索引 UNIQUE MySQL...中的INSERT … ON DUPLICATE KEY UPDATE语句,该语句是基于唯一索引或主键使用 ON DUPLICATE KEY UPDATE后面可以放多个字段,用英文逗号分割。...使用ON DUPLICATE KEY UPDATE,最终如果插入了一个新行,则受影响的行数是1,如果修改了已存在的一行数据,则受影响的行数是2,如果值不变,则受影响行数是0。...`num_true`=4, `grade`=20, `time_sub`=NOW(), `time_do`=200; 上面语句亲测可用,但有一个警告 共 2 行受到影响, 1 个警告 执行耗时...插入……对于具有多个唯一密钥的表的重复密钥更新是不安全的 相关博客:https://blog.csdn.net/rick_zyl/article/details/79024612 mysql 有就更新

2.7K20

MySQL的SELECT …for update

要使用悲观锁,我们必须关闭mysql数据库的自动提交属性。 set autocommit=0;   //设置完autocommit后,我们就可以执行我们的正常业务了。...拿上面的实例来说,当我执行select status from t_goods where id=1 for update;后。...我在另外的事务中如果再次执行select status from t_goods where id=1 for update;则第二个事务会一直等待第一个事务的提交,此时第二个查询处于阻塞的状态,但是如果我是在第二个事务中执行...补充:MySQL select…for update的Row Lock与Table Lock   上面我们提到,使用select…for update会把数据给锁住,不过我们需要注意一些锁的级别,MySQL...InnoDB默认Row-Level Lock,所以只有「明确」地指定主键,MySQL 才会执行Row lock (只锁住被选取的数据) ,否则MySQL 将会执行Table Lock (将整个数据表单给锁住

3.7K30

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的数据,那么程序就会卡住不动): 执行后再次查看数据库:

27920

MySQL 案例:Update 死锁详解

死锁的两个语句如下: UPDATE tbl_deadlock SET col1 = 1, col2 = 1, update_time = 1603685523 WHERE (id1 = 6247476)...AND (id2 = 74354) UPDATE tbl_deadlock SET col1 = 1, col2 = 1, update_time = 1603685523 WHERE (id1 =...MySQL 的锁机制天然具备这个条件。 请求与保持条件:资源请求被阻塞时,已持有的资源不会被释放。 MySQL 不触发死锁回滚,且未进入 lockwait_timeout 的时候,具备这个条件。...由于 MySQL 的锁机制的原因,只需要判断出两个 SQL 语句的锁存在循环等待,那么死锁的条件就会成立了。...因此本案例中,虽然死锁信息中记录的索引名称不一样,但是锁争用的条件是成立的,即:trx1 通过二级索引向主键上执行了加锁操作,而 trx2 在其他的二级索引上拿到了锁,但是主键锁拿不到,因此进入了等待状态

14.4K174

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券