本节书摘来自异步社区出版社《MySQL排错指南》一书中的第1章,第1.4节,作者:【美】Sveta Smirnova(斯维特 斯米尔诺娃),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 获取查询信息

正如前一节看到的一样,数据库会返回一些关于每个查询的重要信息,有些信息直接展现在MySQL的访问客户端中,而有些信息则需要通过如SHOW WARNINGS等命令才能得到。当从应用程序中调用SQL语句的时候,获取这些返回信息并确认没有异常情况发生同样重要。所有语言的MySQL API都提供了获取服务器返回信息的接口。本节将讨论这些接口。这里仅涉及C的API,因为我必须选择一种语言的API,并且大部分其他语言的API都是基于C的API的[2]。

受影响的行数

我们从之前见过的输出开始,每次插入、更新或者删除后都会显示有多少行数据插入、更新或者删除了:

这个信息代表查询正常执行并且修改了N行数据。

要在应用程序中获取相同的信息,可以调用:

如果有改变发生,该函数会返回一个正数,如果没有改变那么返回0,−1代表反生错误。

对于UPDATE语句,如果客户端设置了CLIENT_FOUND_ROWS,那么该函数将会返回满足WHERE条件的行数,这个数并不总是和实际更改的行数一致。

提示 提示

对于Connector/J来说,默认不启用受影响的行,因为这不是JDBC兼容的特性并且会使其DML语句依赖于匹配的行数而不是受影响的行数的大多数应用程序产生错误。不过对于INSERT...ON DUPLICATE KEY UPDATE类型的语句会返回正确的更新数量。连接字符串属性useAffectedRows告诉Connector/J在连接到服务器的时候是否设置CLIENT_FOUND_ROWS标志。

匹配的行数

输出中表示该数目的字符串是:

该输出表明有多少行满足WHERE条件。

下面的C函数:

以字符串格式返回关于最近的查询的补充信息。

对于更新操作来说,它返回的字符串类似:

其中,每个#依次对应代表匹配的行数、修改的行数和警告数目。可以通过解析该行中的“matched: #”获悉有多少行被查找出来。

被修改的行数

输出中代表该数目的字符串是:

该输出表明有多少行实际上修改了。需要注意的是,匹配行数M和修改的行数P是可以不同的。例如,假设你想要修改的列已经包含你指定的值,在这种情况下,该列会被认为是匹配的而不是修改的。

在应用程序中,像之前一样用mysql_info()获取信息,不过这次是解析“Changed: #”。

警告:数目和消息

输出中表示这部分信息的字符串是:

如果服务器在处理请求过程中探查到一些不寻常的情况或者值得报告的情况,你将会获得警告。不过查询仍然会执行并且会修改数据。无论如何请确保检查警告信息,因为它们会帮助你获悉潜在的问题。

在应用程序中,有很多不同的方式去获取警告。仍可以使用mysql_info()函数,然后解析“Warinings: #”。也可以调用:

如果有警告,可以执行SHOW WARNINGS命令去获取关于究竟发生了什么的文本消息。另一个选择是:

该函数将返回最近的SQL状态(SQLSTATE)。例如,“42000”代表语法错误,“00000”代表没有错误和警告。

提示 提示

SQLSTATE的值由ANSI SQL标准定义,用于表明语句的执行状态。执行状态被设置成标准中定义的状态码,表明一个请求是成功完成还是返回异常。SQLSTATE以字符串形式返回。要了解MySQL服务器可能返回哪些状态码,可以阅读MySQL参数手册中的“服务器错误码和错误消息”一节。

错误

检查错误也总是很有用。下面的函数返回最近SQL语句的错误值。

..tu18-1.tif

该函数返回最近一次错误的MySQL错误代码。例如,语法错误会生成数字1064,0意味着没有错误。

该函数返回最近一次错误的文本信息。对于语法错误,它会返回类似以下的内容。

这有利于保存存储于不同日志文件中的信息,使你可以在任何时候检查它们。

提示 提示

MySQL官方文档包含MySQL服务器可能返回的错误列表以及客户端错误列表。

**

通过perror获取错误字符串**

perror工具是MySQL发行包中携带的一款用于解决问题的非常有用的工具。perror能够提供与给定错误代码相关联的MySQL及其所在操作系统的错误信息。可以从MySQL命令行客户端、信息函数或其他错误日志文件中的错误消息中后面括号的部分获取错误代码。下面是一些示例:

当命令产生错误的时候会在MySQL客户端输出这些错误代码,这些错误代码可以通过mysql_error()函数由程序获取。然而,当你面对一个错误码不知所措的时候,可以使用perror工具。

mysql 客户服务号获取_《MySQL排错指南》——1.4 获取查询信息-阿里云开发者社区...相关推荐

  1. mysql数据漂移_数据库漂移-和数据库漂移相关的内容-阿里云开发者社区

    MySQL双主一致性架构优化 | 架构师之路 一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点. 在一个My ...

  2. 图论 物联网_图论算法-和图论算法相关的内容-阿里云开发者社区

    数学建模需掌握的知识总纲 数学建模需要掌握许多知识,这里我列出总纲: 学建模中的算法 穷举法 神经网络 模拟退火 遗传算法 图论算法 蒙特卡洛算法 所需基础知识 高等数学 线性代数(矩阵加减乘除) 概 ...

  3. mysql异地多活方案_基于MGR高可用异地多活方案-阿里云开发者社区

    一.概述 主要目的实现MySQL高可用解决方案,实现异地多活. 二.实现构思 基于MGR实现高可用异地多活 首先要基于位置信息进行分片,例如华北 华中,华南,程序层要进行ip过滤和判断, 针对不同的i ...

  4. lua mysql 事务_为什么在 Redis 实现 Lua 脚本事务?-阿里云开发者社区

    在刚过去的几个月中,我一直在构思并尝试在 redis 中实现 lua 脚本的事务功能.没有多少人理解我的想法,所以我将通过一些历史为大家做下解释. MySQL 与 Postgres 在 1998-20 ...

  5. mysql 5.1版本无innodb trx_MySQL 5.7: Innodb 事务子系统优化-阿里云开发者社区

    MySQL5.7 : Innodb 事务子系统优化 之前写了篇博客介绍了Percona Server对Read View的优化,顺带简单提到了MySQL5.7的事务子系统优化,详细见http://my ...

  6. canal同步mysql到kafka_使用Canal同步MySQL数据到Kafka 得到的数据中sql字段无值-问答-阿里云开发者社区-阿里云...

    这个应该跟你的binlog记录模式有关系,binlog有3中模式,ROW(行模式), Statement(语句模式), Mixed(混合模式)三种模式的用法如下: ROW(行模式):记录那条数据修改了 ...

  7. 存储过程mysql into select into_mysql 存储过程select into select into select的搜索结果-阿里云开发者社区...

    对一个MySQL存储过程的优化 在编写MySQL存储过程的过程中,我们会时不时地需要对某些存储过程进行优化,其目的是确保代码的可读性.正确性及运行性能.本文以作者实际工作为背景,介绍了对某一个MySQ ...

  8. mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

  9. cmake mysql 参数_MySQL cmake编译时这些参数是什么意思?-问答-阿里云开发者社区-阿里云...

    一般用到的参数# -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装路径 # -DMYSQL_DATADIR=/usr/local/mysql/data \ # ...

最新文章

  1. 为啥现在4位单片机依然没有被淘汰?4位单片机还有用的吗?
  2. Anchor Boxes——目标检测质量的关键
  3. python圣诞节快乐_用python让大白对你说圣诞快乐
  4. 运用PFA的路灯指示牌GUI程序
  5. 【UOJ#33】【UR #2】树上GCD(长链剖分/根号分类讨论)
  6. NewCode----数串
  7. 03-对图像进行数值计算和加权融合
  8. linux课程设计qq,仿QQ聊天系统课程设计.doc
  9. ASP.Net请求处理机制初步探索之旅 - Part 2 核心
  10. 前端大神的离逝,让我们不得不有所反思。
  11. 正则表达式RegExp对象
  12. 初中计算机ps教程,初中信息技术《认识Photoshop CS2的工作界面》教案
  13. Nvidia Xavier调节风扇转速与开机启动
  14. java的I/O流,开发教学第二章作业
  15. win10解决cmd无法切换盘符的问题
  16. 黄柳青:中国软件的致命缺陷是什么!
  17. matlab中repmat函数使用举例解释(会识字就能看懂)
  18. CGB2106-Day10
  19. DeepMind 新发布的聊天机器人很好,但还不够好
  20. Java性能优化的5个技巧

热门文章

  1. Windows和Linux如何使用Java代码实现关闭进程
  2. 2017网易内推编程题(判断单词):解答代码
  3. Css 选择器 算法 规则
  4. 读jQuery之十二(删除事件核心方法)
  5. 《WCF技术内幕》翻译25:第2部分_第5章_消息:创建一个消息(下)之MessageFault
  6. 使用OutputDebugString帮助调试
  7. EtherCAT伺服驱动器-如何选择硬件开发方案
  8. linux单线程处理多个请求,redis是单线程的,如何处理并发请求?
  9. mysql 时间 本周 本月_mysql查询当天、本周、上周、本月、上月信息
  10. py-faster-rcnn代码roidb.py的解读