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安装为什么一直闪退

    mysql安装为什么一直闪退mysql安装为什么一直闪退mysql安装为什么一直闪退mysql安装为什么一直闪退

    MySQL 安装闪退的原因包括:系统不兼容、文件损坏、权限不足、冲突软件、硬件故障等。解决方法:检查系统兼容性、重新下载安装包、检查权限、关闭冲突软件、排除硬件问题。如问题持续,请联系技术支持。 MySQL 安装频繁闪退的原因 MySQL 安装过程中遭遇闪退是一个常见问题,原因可能有以下几点: 系统…

    2026年9月25日 • 用户投稿
    000
  • 为什么安装了mysql没有图标

    为什么安装了mysql没有图标为什么安装了mysql没有图标为什么安装了mysql没有图标为什么安装了mysql没有图标

    刚安装 MySQL 没有图标的原因可能包括:环境变量未配置、快捷方式未创建、文件关联未设置或图标文件丢失。解决方法有:配置环境变量、创建快捷方式、设置文件关联、重新安装或修复 MySQL,以及检查防病毒软件、管理权限和使用 mysticicon 命令。 为什么安装了 MySQL 没有图标 刚安装 M…

    2026年9月25日 • 用户投稿
    000
  • mysql是什么工具

    mysql是什么工具mysql是什么工具mysql是什么工具mysql是什么工具

    MySQL 是一种开源的 RDBMS,使用 SQL 管理和查询数据,其主要功能包括:数据存储和管理数据查询和检索事务支持索引优化安全访问控制备份和恢复 MySQL:是什么工具? MySQL 是一种关系型数据库管理系统 (RDBMS),它使用结构化查询语言 (SQL) 来管理和查询数据。它是一个开源和…

    2026年9月25日 • 用户投稿
    100
  • mysql中dcl是什么意思 mysql数据控制语言解析

    dcl在mysql中指的是数据控制语言,主要用于管理数据库的访问权限和控制用户操作。dcl包括以下命令:1. grant,用于授予用户权限;2. revoke,用于撤销用户权限。通过这些命令,数据库管理员可以精细地控制数据库访问和操作权限,确保数据库的安全性和管理。 在MySQL中,DCL指的是数据…

    2026年9月25日
    100
  • mysql中如何创建表

    mysql中如何创建表mysql中如何创建表mysql中如何创建表mysql中如何创建表

    在 MySQL 中创建表涉及五个步骤:1. 打开 MySQL 命令行;2. 连接到数据库;3. 使用 CREATE TABLE 语法指定列名和数据类型创建表;4. 执行查询;5. 使用 SHOW TABLES 查询验证表是否已创建。 MySQL 中创建表的步骤 在 MySQL 中创建表的过程简单明了…

    2026年9月25日 • 用户投稿
    100
  • mysql英文版如何变成中文版

    mysql英文版如何变成中文版mysql英文版如何变成中文版mysql英文版如何变成中文版mysql英文版如何变成中文版

    将 MySQL 英文版转换为中文版需要以下步骤:下载中文语言包;解压语言包并复制文件到指定目录;编辑 MySQL 配置文件,添加字符集设置;重新启动 MySQL 服务;更改数据库字符集为 utf8;更改表字符集为 utf8;重新启动 MySQL 服务并验证更改。 如何将 MySQL 英文版转换为中文…

    2026年9月25日 • 用户投稿
    100
  • mysql如何读取数据库数据

    mysql如何读取数据库数据mysql如何读取数据库数据mysql如何读取数据库数据mysql如何读取数据库数据

    MySQL 读取数据库数据有两种常用方法:SELECT 语句,用于从表中提取数据,语法为:SELECT [列名] FROM [表名] [条件] [分组] [条件] [排序] [限制]。fetchall() 方法,用于将所有结果行存储在一个元组列表中。 MySQL 读取数据库数据 MySQL 提供了多…

    2026年9月25日 • 用户投稿
    100
  • mysql如何配置环境

    mysql如何配置环境mysql如何配置环境mysql如何配置环境mysql如何配置环境

    MySQL 环境配置步骤:安装 MySQL 安装程序。创建 root 用户并授予权限。修改配置文件(datadir、bind-address、port)。启动 MySQL 服务。测试安装(显示 “mysql” 数据库)。创建非 root 用户并授予权限。配置安全功能(SSL …

    2026年9月25日 • 用户投稿
    100
  • 如何将一键PHP环境迁移到新电脑_环境数据迁移教程

    先完整备份旧环境的网站文件、数据库和配置,再在新电脑安装相同版本的一键PHP环境,最后还原数据与配置实现迁移。 如果你在旧电脑上使用一键PHP环境(如phpStudy、XAMPP、WampServer等),想把整个开发环境和数据迁移到新电脑,可以按以下步骤操作,确保网站、数据库、配置全部完整转移。 …

    2026年9月25日
    200
  • mysql用户身份验证查询的是哪个表

    mysql用户身份验证查询的是哪个表mysql用户身份验证查询的是哪个表mysql用户身份验证查询的是哪个表mysql用户身份验证查询的是哪个表

    MySQL 用户身份验证信息存储在 mysql.user 表中,包含以下信息:用户名密码哈希值主机或 IP 地址权限创建和修改时间 MySQL 用户身份验证 查询的表: mysql.user 详细解释: mysql.user 表存储了 MySQL 数据库中所有用户的相关信息,包括: 蓝心千询 蓝心千…

    2026年9月25日 • 用户投稿
    100
  • 哪个是mysql读文件的函数

    哪个是mysql读文件的函数哪个是mysql读文件的函数哪个是mysql读文件的函数哪个是mysql读文件的函数

    MySQL 读取文件内容的函数是 LOAD_FILE()。该函数通过接受一个文件路径作为参数来返回文件中的内容作为文本字符串,语法为:LOAD_FILE(file_path)。它可以读取本地文件,但需要具有读取权限。需要注意的是,该函数可能返回不正确的结果,例如文件不存在或包含二进制数据。 哪个是 …

    2026年9月25日 • 用户投稿
    100
  • Debian Tomcat日志中的慢查询如何优化

    Debian Tomcat日志中的慢查询如何优化Debian Tomcat日志中的慢查询如何优化Debian Tomcat日志中的慢查询如何优化Debian Tomcat日志中的慢查询如何优化

    本文探讨如何在Debian系统上优化Tomcat应用中的数据库慢查询。需要注意的是,Tomcat本身不记录慢查询,而是由数据库(如MySQL)负责。因此,优化过程主要针对数据库层面。 第一步:启用数据库慢查询日志 首先,确保你的数据库已启用慢查询日志记录功能。以MySQL为例,可以通过以下两种方式实…

    2026年9月25日 • 用户投稿
    100
  • mysql中哪个函数可以读取文件内容

    mysql中哪个函数可以读取文件内容mysql中哪个函数可以读取文件内容mysql中哪个函数可以读取文件内容mysql中哪个函数可以读取文件内容

    MySQL 中读取文件内容的函数是 LOAD_FILE(),用法为 LOAD_FILE(file_name),其中 file_name 为文件路径和名称。函数返回文件内容的字符串,如:SELECT LOAD_FILE(‘/tmp/data.txt’)。但须注意文件系统权限、路…

    2026年9月25日 • 用户投稿
    000
  • mysql怎么创建新连接

    mysql怎么创建新连接mysql怎么创建新连接mysql怎么创建新连接mysql怎么创建新连接

    要创建新的 MySQL 连接,需要导入 MySQL Connector,然后依次创建连接对象、验证连接、创建游标对象、执行查询、检索结果,最后关闭连接。 如何创建新的 MySQL 连接 若要创建新的 MySQL 连接,可以使用以下步骤: 1. 导入 MySQL Connector 导入 MySQL …

    2026年9月25日 • 用户投稿
    100
  • mysql命令行怎么打开

    mysql命令行怎么打开mysql命令行怎么打开mysql命令行怎么打开mysql命令行怎么打开

    要打开 MySQL 命令行,需执行以下步骤:1. 安装 MySQL;2. 打开终端;3. 使用 mysql 命令连接 MySQL 服务器,指定用户名、密码和主机名;4. 输入密码以建立连接。 如何打开 MySQL 命令行 要打开 MySQL 命令行,您需要遵循以下步骤: 步骤 1:安装 MySQL …

    2026年9月25日 • 用户投稿
    200
  • 怎么恢复mysql数据库中删除的数据库

    怎么恢复mysql数据库中删除的数据库怎么恢复mysql数据库中删除的数据库怎么恢复mysql数据库中删除的数据库怎么恢复mysql数据库中删除的数据库

    要恢复已删除的 MySQL 数据库,首先确认其已删除。然后,有两种恢复方法:使用备份文件或从二进制日志文件恢复。从备份文件恢复需要先停止服务器、复制文件并运行查询。从二进制日志文件恢复则需要确保日志记录已启用,提取操作并运行查询创建并恢复数据库。恢复完成后,可以通过查询确认恢复是否成功。 如何在 M…

    2026年9月25日 • 用户投稿
    100
  • mysql怎么恢复刚删除的表数据

    mysql怎么恢复刚删除的表数据mysql怎么恢复刚删除的表数据mysql怎么恢复刚删除的表数据mysql怎么恢复刚删除的表数据

    快速恢复刚删除的表:使用 FLUSH LOGS 和 ALTER TABLE 命令。深度恢复较长时间删除的表:满足条件(二进制日志启用、事件记录)、确定事件日志位置、转储日志、编辑 SQL 文件、应用 SQL 文件。 如何在 MySQL 中恢复刚删除的表数据 快速恢复 如果表刚被删除,可以使用以下命令…

    2026年9月25日 • 用户投稿
    200
  • mysql怎么使用表

    mysql怎么使用表mysql怎么使用表mysql怎么使用表mysql怎么使用表

    MySQL 表是存储数据的结构,使用 CREATE TABLE 命令创建表,INSERT INTO 命令插入数据,SELECT 命令查询数据,UPDATE 命令更新数据,DELETE 命令删除数据。 如何使用 MySQL 表 MySQL 表是用于存储和管理数据的结构。它们是任何 MySQL 数据库中…

    2026年9月24日 • 用户投稿
    100
  • mysql怎么使用数据库命令

    mysql怎么使用数据库命令mysql怎么使用数据库命令mysql怎么使用数据库命令mysql怎么使用数据库命令

    MySQL 命令包括:1. 数据操作语言(DML):SELECT、INSERT、UPDATE、DELETE;2. 数据定义语言(DDL):CREATE、ALTER、DROP;3. 数据控制语言(DCL):GRANT、REVOKE;4. 事务控制:BEGIN、COMMIT、ROLLBACK;5. 实用…

    2026年9月24日 • 用户投稿
    100
  • mysql数据库只读怎么解决

    mysql数据库只读怎么解决mysql数据库只读怎么解决mysql数据库只读怎么解决mysql数据库只读怎么解决

    解决 MySQL 数据库只读模式的方法:等待维护活动结束;检查系统日志找寻错误;重启 MySQL 服务;检查并调整 read_only 变量;联系数据库管理员寻求帮助。 MySQL 数据库只读模式解决方法 当 MySQL 数据库进入只读模式时,用户将无法对其进行任何写入操作,包括插入、更新和删除数据…

    2026年9月24日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信