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

MySQL Update语句是怎么执行的?

MySQL Update语句是怎么执行的?...[isd2tnp037.png] 昨天,我们利用这张图,了解了一个select语句的执行过程,讲解了连接器、查询缓存、分析器、优化器、执行器等模块的作用,今天我们来看一条update语句是怎么执行的...其实,update语句的执行过程和select语句差不多,但是在update语句执行的过程中,MySQL新增加了两个重要的日志模块,他们分别是redo log(重做日志)和binlog(二进制日志、也可以称之为归档日志...redo log的出现就是为了解决这个问题,redo log既存在于内存中,又存在于磁盘中,当我们update一条记录的时候,Innodb会先把记录写在redo log中,然后告诉客户端更新完毕了,但其实...一般情况下,当我们出现误操作时,大概率会使用全量备份+binlog的方式恢复数据,而如果此时使用binlog恢复出来的数据有误,那无疑会对业务产生影响。

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

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

    MySQL可以恢复到半月内任意一秒的状态!如何做到的? 得从一个表的一条更新语句说起。 创建一个男人表,主键id和整型字段age: ? 插俩数据。 ? 将id=2这一行的值加1 ?...SQL语句基本的执行流程同样适用于更新语句。...“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。 看执行器和InnoDB引擎在执行这个简单的update语句时的内部流程。 执行器先找引擎取id=2这行。...假设当前ID=2的行,字段c的值是0,再假设执行update语句过程中,在写完第一个日志后,第二个日志还没有写完期间发生crash?...需要扩容时,需要再多搭建一些备库来增加系统的读能力的时候,现在常见的做法也是用全量备份加上应用binlog来实现的,这个“不一致”就会导致你的线上出现主从数据库不一致的情况。

    3.6K10

    Java连接MySQL以及出现的问题

    java想要连接数据库,就需要用到JDBC(驱动文件),什么是JDBC....Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。...5.x的版本,而大家如果是最近下载,难免会下载高版本的驱动文件,这就可能出现错误,下面这个方法可能会帮助到你。...一个是Class.forName(),在5.x版本的驱动文件jar包对应的是:Class.forName("com.mysql.jdbc.Driver");语句来加载数据库驱动。...而如果使用的是8.0x版本的数据库驱动文件,要改成如下:Class.forName("com.mysql.cj.jdbc.Driver"); 另一个是url的设置也得进行修改,原本的url如下:String

    1.4K21

    MongoDB 临时表横空出现 1 万+,这条语句执行前请准备好翻车的姿势

    解决问题之前,先在脑海中演绎一下当时场景 某日早上八点半,笔者接到客户反馈,门户首页待办访问异常缓慢,经常出现“访问异常,点击重试”。...笔者没办法,只能仔细分析 docker 容器日志,发现大部分错误由同一个方法造成的。...org.springframework.data.mongodb.core.MongoTemplate.mapReduce 通过查阅 MongoDB 官方文档知悉, mapReduce 方法类似于 MySQL...中的 group by 语句,非常适合做表字段聚合(分组)分类统计功能。...所以,接下来需要加强项目组危机意识,不管是管理流程,代码质量,还是服务器资源监控以及必要的性能测试等。上线发版前,做好事前控制,事中做好服务监控,事后做好复盘,避免下次犯同样的错误。

    1.3K30

    使用java(jdbc)向mysql中添加数据时出现“unknown column……”错误

    错误情况如题,出现这个错误的原因是这样的: 在数据库中,插入一个字符串数据的时候是需要用单引号引起来的。...变量其实我是用SimpleDate类设置的是一个字符串类型的数据了,根据上面的叙述,得知这个“+date+”还是需要使用单引号引起来的,如下: VALUE ("+id+",'"+date+"',"+record...+","+money+") 这样再进行数据插入的时候就不会出现错误了。...使用java向数据库中插入数据的时候有一句口诀:单单双双加加 见名知意,最外层是单引号‘’,第二层是双引号“”,最里面是加号++。...感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!

    5.2K20

    解决Java程序连接mysql数据库出现CommunicationsException: Communications link failure错误的问题

    一、背景   最近在家里捣鼓一个公司自己搭建的demo的时候,发现程序一启动就会出现CommunicationsException: Communications link failure错误,经过一番排查最后发现是数据库...url写错造成的,这个过程中也对出现这个错误的解决思路有了一些自己的理解,现和大家分享。...该错误的具体信息如下: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The...(Util.java:404) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:981) at...这时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。

    9.7K10

    MySQL中使用group by出现1055错误的解决办法

    注:由于执行sql进行修改的方法在重启mysql后会失效,所以本文仅介绍通过修改配置文件从而永久解决该问题的办法 在MYSQL中通过GROUP BY查询数据时报错如下 [Err] 1055 - Expression...应该支持的sql语法,对数据的校验等 解释:ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的...,因为列不在GROUP BY从句中 因为有only_full_group_by,所以我们要在MySQL中正确的使用group by语句的话,只能是select column1(只能是一个字段) from...tb1 group by column1(即只能展示group by的字段,其他均都要报1055的错,如下图) 我们需要修改sql_mode,Linux中的操作如下: 修改根目录中的/etc...注意要点: (1)配置文件加的内容一定要放在[mysqld]标签下; (2)修改的my.cnf最好是/etc下的,因为按照加载顺序首先加载该目录下的

    74010

    Your password does not satisfy the current policy requirements 修改mysql密码出现的错误

    0.起因 安装mysql8.0使用临时密码登录后,提示修改密码 根据提示修改mysql密码 update user set password=password(‘123’) where user='root...' 出现错误 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 修改密码 alter...user 'root'@'localhost' identified by '123456'; 1.解决方案 1.1 对于5.7版本的mysql,即可解决问题 set global validate_password_policy...=0; set global validate_password_length=1; 1.2对于8.0版本的解决方案 如果服务器安装的是8.0版本的mysql,使用5.7的解决方案,则会出现以下报错信息...validate_password_policy' ERROR 1193 (HY000): Unknown system variable 'validate_password_length' 原因:8.0版本的mysql

    2.6K10

    MySQL 高频面试题解析 第01期:一条 update 语句的生命历程

    作者简介 无为,多年 MySQL DBA 工作经验,现就职于某知名互联网公司,对 MySQL、 Redis、PostgrepSQL 等主流数据库有一定了解,拥有丰富的一线运维经验。...在有关 MySQL 的面试时,是不是曾经有被问到过:一条 update 语句的生命历程是怎样的?今天就来聊聊这一面试题。...这篇文章通过这条语句进行讲解: update test set a=5 where id = 10; 一条 SQL 语句在的执行,总的来说可以分为:Server 层和存储引擎层(本节只聊 InnoDB)...1.2 分析器 在通过验证以后,分析器会对该语句分析,判断是否语法有错误等。 1.3 优化器 选择索引,生成执行计划。 1.5 执行器 根据优化器生成的执行计划,调用存储引擎 API 执行 SQL。...写 change buffer 如果此次 update 操作涉及到二级索引的修改,则写入 change buffer page 。

    43450

    Java开发者编写SQL语句时常见的10种错误

    以下是Java开发人员使JDBC或jOOQ编写SQL语句时,几种常见的错误(排名不分先后) 1.忘记了NULL 误解NULL的含义可能是Java开发人员编写SQL最常犯的错误。...7.不使用MERGE语句 严格意义上讲,这不是一个真正的错误,可能只是对于功能强大的MERGE语句缺乏足够的认知或存在着某种恐惧而已。...有些数据库包括其他形式的UPSERT 语句,如MySQL的ONDUPLICATE KEY UPDATE子句。...FOR UPDATE来实现UPSERTING,那么你要多想一想。抛开与运行条件的风险,你也许可以使用一个简单的MERGE语句来达到目的。...如果你要将所有记录都插入到同一个表,使用单一的SQL语句和多个绑定值集合建立一个批处理的INSERT语句。

    1.8K50

    处理java访问mysql连接数太多的错误

    在生产环境处理故障的过程出现了java服务连接mysql,由于连接数太多被拒绝连接的故障,那么下面来看看怎么优化一下吧。 ?...首先为了快速恢复服务,先对mysql主从两台服务进行重启处理 service mysqld restart 然后观察服务端的错误日志,对mysql的连接相关参数进行优化 关于mysql连接数优化的参数...对于java连接mysql,是有mysql连接池的,如果提示该错误,可以往这两个方向对mysql优化一下: 1.配置mysql的最大连接数 2.配置centos7服务器的文件打开数 3.配置...修改wait_timeout可能出现的程序错误: 当服务器端去连接mysql的时候,连接池里的连接已经被mysql主动断开,这时取回的连接就是null,再加上程序里对此没有做判断的话,接下来的对数据库的一系列的操作都会出现问题...这个时候就会可能出现mysql连接丢失的情况。 如果碰到这种情况,最好再调整一下mysql的时间,选择一个适中的。

    1.8K30

    MYSQL 8 从metadata开始到如何获得语句由于获取锁失败的错误

    not in (connection_id(),p.id); 通过这个方式可以将长时间等待metadata lock 不工作的事务从数据库中找出来, 并产生一个kill 的语句。...,用户的prepare状态会被保持直到XA_COMMIT 或者 XA_ROLLBACK 除了这个问题以外,就是关于如何发现曾经MYSQL 发生过错误,一般的情况MYSQL 5.X我们都是去找到ERROR...LOG ,里面去找寻可能发生的信息,但是MYSQL 8 我们在performance_schema 中已经有了 events_errors 系列,这些表可以让你从各个层面来了解MYSQL 在最近都发生过什么错误...; 以上的这个表,主要是从访问数据库的用户的角度来出发,查看这个用户曾经发生过什么样的错误,我们可以改写一下这个查询的语句,来更精确的对这个账号发生过什么错误进行判断。...SUM_ERROR_RAISED > 0 and error_name in ('ER_LOCK_WAIT_TIMEOUT','ER_LOCK_DEADLOCK','ER_LOCK_TABLE_FULL'); 上面的语句可以发现你最后一次产生查询问题的账号以及问题的原因

    2K30
    领券