mysql中update语句返回什么

mysql中update语句的返回结果:1、当数据库的url中没有“useAffectedRows=true”参数时,返回匹配行数;2、当数据库的url中有“useAffectedRows=true”参数时,返回影响行数。

mysql中update语句返回什么

本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。

mysql中update语句返回什么

update语句的结果到底是匹配行数?还是影响行数?

先说结果:如果数据库的url为:

jdbc:mysql://gitlab.fzghjx.com:3306/cron

则,返回结果为匹配行数(Rows matched)。

若为:

jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true

则返回的是影响行数(Changed)。

综上:

如果url中没有  useAffectedRows=true  这个参数,则返回的是匹配行数。如果有,则返回的是影响行数。

如何让其返回值为受影响(changed)的记录数呢?

只需在mysql数据连接url参数加useAffectedRows=true即可

jdbc.url=jdbc:mysql://localhost:3306/ssm?useAffectedRows=true

扩展知识:

猜想

如果通过cmd操作mysql的update语句,屏幕上显示其实是这样的:

mysql中update语句返回什么

当我想这个问题的时候,第一反应有两个答案,1,在mysql服务器的返回结果中,进行判断,如果有这个设置为true,则返回Rows matched的值,如果为false,则返回Changed的值。2,在返回给查询语句的时候,进行这个值的选择。

证实

借用一个图来说明创建connection的整个过程:

mysql中update语句返回什么

(图摘自:https://blog.csdn.net/c929833623lvcha/article/details/44517245)

当我研究了一段时间之后,我发现,这两种想法都错了。具体来看:

我写了一个简单的jdbc查询:

mysql中update语句返回什么

1,建立Connection

根据源码,追踪,在mysql建立connection的时候,会将useAffectedRows=true这个参数设置为connection的属性。

Connection connection = DriverManager.getConnection("jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true", "root", "root");

往下追踪:

mysql中update语句返回什么

继续:connect方法为:java.sql.Driver#connect,实现为:com.mysql.jdbc.NonRegisteringDriver#connect

mysql中update语句返回什么

useAffectedRows=true就是在com.mysql.jdbc.NonRegisteringDriver#parseURL方法中读取,并设置到  Properties props中去的。

再往下:com.mysql.jdbc.ConnectionImpl#getInstance获取connectiong的实例

mysql中update语句返回什么

这里是一个反射,args为  JDBC_4_CONNECTION_CTOR   用到的是JDBC的构造函数:

mysql中update语句返回什么

JDBC的构造函数,是:

public JDBC4Connection(String hostToConnectTo, int portToConnectTo, Properties info, String databaseToConnectTo, String url) throws SQLException {    super(hostToConnectTo, portToConnectTo, info, databaseToConnectTo, url);}

往上找,是ConnectionImp的构造函数:

mysql中update语句返回什么

(顺便提一句:这里设置了事务的隔离级别为2,读已提交)

mysql中update语句返回什么

在这个构造函数里,将  useAffectedRows的值初始化到connection中去了:

mysql中update语句返回什么

这里有206个属性要设置,useAffectedRows排在190位(不同的mysql-connect-java版本,位置不一样)。

设置完成之后:

mysql中update语句返回什么

2,创建MysqlIO

设置完属性之后,就要创建MysqlIO了:

mysql中update语句返回什么

mysql中update语句返回什么

这里有一个“高可用”的选项,如果是的话,就会创建一个重试的IO链接。否则,则创建一个只尝试一次的IO链接,失败了就不会重试。这个选项,也是在url中,通过设置:autoReconnect=true来开启的。

3,与msyql服务器握手连接

连接IO过程,其实就是创建一个MysqlIO,然后开始握手:

mysql中update语句返回什么

重点来了:在doHandshake方法中,设置了useAffectedRows的选项:(com.mysql.jdbc.MysqlIO#doHandshake)

mysql中update语句返回什么

这个CLIENT_FOUND_ROWS的值为:

mysql中update语句返回什么

也就是低位的倒数第二位的值进行操作。如果useAffectsRows,则不会进行操作。

设置完之后,通过mysqlOutput的socket发送给mysql 服务器:

mysql中update语句返回什么

mysqlOutput来源:在MysqlIO构建的时候创建的。

mysql中update语句返回什么

ok,这是一个简单的过程。接下来,来看tcp的报文:

4,报文分析:

useAffectedRows=true时:

发送请求给mysql服务器:

mysql中update语句返回什么

mysql服务器的响应:

mysql中update语句返回什么

useAffectedRows=false时:

发送请求给mysql服务器:

mysql中update语句返回什么

mysql服务器的响应:

mysql中update语句返回什么

从以上报文可以看出,useAffectedRows为true和false时,msyql服务器的返回值是不同的。最后jdbc取的返回结果,就是报文中,Affected Rows的值 。直接从msyql的结果中获取,jdbc只是对结果进行了一些解析和过滤。由此证明,最开始的猜想是错的。

推荐学习:mysql视频教程

以上就是mysql中update语句返回什么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/175454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
实用技巧:在Laravel中自定义中文验证规则
上一篇 2026年8月31日 10:35:27
诺基亚来电键盘的手机有哪些(诺基亚3款性价比高的手机)
下一篇 2026年8月31日 10:40:29

相关推荐

  • 如何在mysql中防止暴力破解登录

    启用connection_control插件限制登录失败次数并设置延迟,2. 使用validate_password强制强密码策略,3. 限制远程访问并配置防火墙,4. 创建最小权限账户禁用root远程登录,5. 监控日志并设置告警,通过多层防护阻止暴力破解。 防止 MySQL 暴力破解登录的关键在…

    2026年9月10日
    600
  • 如何在Java中实现小型论坛管理

    答案:基于Java的论坛系统设计包含用户、帖子、评论三类实体,通过JDBC操作MySQL实现数据持久化,分层架构涵盖DAO与Service逻辑,结合Servlet可完成基础交互。 实现一个小型论坛管理系统,核心是围绕用户、帖子和评论三大模块进行设计。Java作为后端语言,配合数据库和基础Web技术即…

    2026年9月10日
    000
  • 如何在mysql中使用InnoDB实现行级锁

    答案:在MySQL的InnoDB引擎中,行级锁的实现依赖于索引、事务和隔离级别。使用索引字段作为WHERE条件可确保行锁生效,避免升级为表锁;通过BEGIN或START TRANSACTION显式开启事务,执行UPDATE或DELETE时自动加排他锁;选择合适的隔离级别(如READ COMMITTE…

    2026年9月10日
    400
  • 如何使用mysql设计在线投票系统

    答案:设计在线投票系统需合理规划数据库结构并实现清晰业务逻辑。1. 建立users(可选)、polls、options和votes表,分别存储用户、投票主题、选项及投票记录;2. 支持单选、多选、限时、匿名或实名投票类型,通过应用层校验限制重复投票;3. 关键SQL操作包括创建投票与选项、检查用户投…

    2026年9月10日
    200
  • mysql如何使用time函数处理时间

    TIME()提取时间部分,如TIME(‘2024-05-20 14:30:25’)返回14:30:25;2. CURTIME()获取当前系统时间;3. TIMEDIFF()计算两时间差值;4. ADDTIME()/SUBTIME()进行时间加减;5. TIME_FORMAT(…

    2026年9月10日
    100
  • mysql如何设计表结构避免冗余

    遵循数据库三范式,通过拆分实体表并用外键关联,消除数据冗余。例如用户、地址、订单分表存储,确保字段原子性、完全依赖主键且无传递依赖,必要时谨慎反范式化以提升性能。 在MySQL中设计表结构避免冗余,核心是遵循数据库规范化原则,合理拆分数据,建立清晰的关系。关键在于识别数据依赖、消除重复字段,并通过外…

    2026年9月10日
    400
  • MySQL查询优化器是怎么工作的_如何利用它提升效率?

    MySQL查询优化器是怎么工作的_如何利用它提升效率?MySQL查询优化器是怎么工作的_如何利用它提升效率?MySQL查询优化器是怎么工作的_如何利用它提升效率?MySQL查询优化器是怎么工作的_如何利用它提升效率?

    mysql查询优化器的核心任务是找出执行查询的最优路径。它会分析sql语句并决定使用哪个索引、访问表的顺序以及是否使用临时表等,最终生成高效的执行计划。其基本工作流程包括解析sql、预处理、逻辑优化、物理优化和生成执行计划五个步骤。要查看优化器的工作情况,可使用explain或explain ana…

    2026年9月10日 用户投稿
    300
  • 如何在mysql中管理用户权限

    创建用户并授予权限是MySQL安全管理的核心,通过CREATE USER创建用户,GRANT分配权限,REVOKE撤销权限,DROP USER删除用户,遵循最小权限原则可提升数据库安全性。 在 MySQL 中管理用户权限主要通过创建用户、授予权限、撤销权限和删除用户等操作来实现。合理配置权限能保障数…

    2026年9月10日
    300
  • 如何在mysql中使用ORDER BY和LIMIT获取Top N记录

    答案是使用ORDER BY结合LIMIT子句获取Top N记录。具体为:通过SELECT 列名 FROM 表名 ORDER BY 排序列 DESC LIMIT N语法查询最高或最新数据,如SELECT name, score FROM scores ORDER BY score DESC LIMIT…

    2026年9月10日
    200
  • 如何在mysql中分析复制日志错误

    首先检查复制状态,使用SHOW SLAVE STATUSG查看Slave_IO_Running和Slave_SQL_Running状态及Last_Error信息;再分析错误日志文件hostname.err中与“[ERROR]”或“Replication”相关的记录;最后根据主键冲突、GTID不一致、…

    2026年9月10日
    200
  • mysql数据库如何进行性能基准测试

    答案是MySQL性能基准测试需明确目标如TPS、QPS、响应时间及并发能力,根据业务场景选择工具如sysbench、mysqlslap或HammerDB,设计贴近实际的测试方案,结合系统资源与数据库状态监控,持续验证优化效果。 MySQL数据库的性能基准测试,核心在于模拟真实业务场景下的负载,评估系…

    2026年9月10日
    400
  • 如何在安装mysql时设置默认存储引擎

    在MySQL配置文件的[mysqld]段落中添加default-storage-engine=InnoDB,2. 初始化时可通过命令指定默认引擎,3. 启动后执行SHOW VARIABLES验证设置,创建表并用SHOW CREATE TABLE确认引擎类型是否生效。 在安装 MySQL 时设置默认存…

    2026年9月10日
    100
  • Laravel模型递增ID?自增ID如何禁用?

    禁用Laravel自增ID需在迁移中使用uuid(‘id’)->primary()并设置模型$incrementing = false和$keyType = ‘string’,以支持UUID主键。 Laravel模型默认是使用自增ID作为主键的,…

    2026年9月10日
    200
  • 如何使用mysql实现购物车结算功能

    答案:购物车结算需通过MySQL事务保证数据一致性,先设计用户、商品、购物车、订单及明细表,结算时开启事务,锁定商品库存并校验,计算金额后创建订单与明细,扣减库存并清空购物车,最后提交事务;若任一步骤失败则回滚。关键在于使用InnoDB引擎、行级锁和索引优化,并避免长时间锁表以减少死锁风险。 购物车…

    2026年9月10日
    300
  • mysql数据库中如何优化联合主键

    合理设计联合主键需注意字段顺序、数量与类型。应将高筛选性的高基数字段如user_id置于前面,遵循最左前缀原则;控制字段数在2-3个以内,避免索引膨胀;禁用大字段或变长类型如VARCHAR(255),优先选用短小定长数值类型;并结合主要查询场景优化,确保主键支持高频查询路径,必要时补充复合索引以提升…

    2026年9月10日
    200
  • 如何在mysql中优化写入性能避免锁冲突

    答案:优化MySQL写入性能需选用InnoDB引擎、合理设计索引、控制事务大小、使用批量操作并调整参数。具体包括:确保ENGINE=InnoDB以支持行级锁;仅创建必要索引,避免频繁更新列和随机主键;将大事务拆分为小批次提交;采用多行INSERT或LOAD DATA INFILE提升写入效率;设置i…

    2026年9月10日
    100
  • 如何在mysql中升级大事务支持

    调整InnoDB日志和缓冲池参数可提升MySQL大事务处理能力,需增大innodb_log_file_size、innodb_log_buffer_size和innodb_buffer_pool_size;优化binlog设置以支持大事务记录;结合应用层拆分事务并监控执行状态,确保系统稳定高效。 M…

    2026年9月10日
    100
  • 如何在mysql中排查存储过程执行异常

    排查MySQL存储过程执行异常需先定位错误来源,再结合日志、异常捕获与调试手段。首先查看log_error路径并检查错误日志,确认是否存在死锁、超时或权限问题;可临时开启general_log追踪SQL执行流程。在存储过程中使用DECLARE HANDLER捕获SQLEXCEPTION,并通过GET…

    2026年9月10日
    200
  • 如何在mysql中使用CASE表达式实现条件逻辑

    CASE表达式在MySQL中用于实现条件逻辑,支持简单CASE和搜索CASE两种形式,可在SELECT、WHERE、ORDER BY等子句中使用;常用于返回自定义值、控制查询逻辑、结合聚合函数进行分组统计,提升SQL表达能力与实用性。 在MySQL中,CASE表达式是一种强大的工具,用于在查询中实现…

    2026年9月10日
    000
  • 如何区分mysql中INNER JOIN和LEFT JOIN

    INNER JOIN只返回两表匹配的行,LEFT JOIN返回左表全部记录且右表无匹配时补NULL。例如查询用户及其订单:INNER JOIN仅包含有订单的用户;LEFT JOIN包含所有用户,无订单者对应字段为NULL。核心区别:INNER JOIN需双向匹配,LEFT JOIN保留左表所有记录。…

    2026年9月10日
    100

发表回复

登录后才能评论
关注微信