客户端与MySQL服务器建立连接后,主要目的是执行命令(连接过程详见MySQL通信协议--连接创建)。MySQL的执行语句都是以()开头的。MySQL服务器根据情况返回不同的响应。有以下几种情况(注:本文所有图片均取自官方文档):
当地的
文本
:
数据包内容大概包括错误码、SQL状态和错误信息,比较简单(见下图)
:
OK包表示该语句执行成功,它会根据建立连接时交换的信息返回一些服务器状态和状态,其实只要返回就代表成功,比如我们平时比较关注的插入时受影响的行数和最后插入的id值都会在这里返回。不管语句类型是什么,它最终都会返回OK或者ok。
值得注意的是从5.7.5开始也可以用了,老的就不直接发了,为了兼容老版本客户端,如果需要使用带EOF标志的,需要在客户端连接的时候声明该标志,区别方法及封装格式如下:
OK:= 0 且 > 7
EOF: = 0xfe 且 < 9
当地的:
如果客户端发送LOAD DATA LOCAL ....命令导入数据,会触发协议包,客户端需要返回LOCAL Data作为响应,直到客户端返回空包。整个流程如下图所示:
文本
目的是返回查询结果,这个协议包是本文中最复杂也是最需要理解的,协议包分为两部分,由元数据(字段信息)和行数据组成。
元数据部分以字段计数的数据包开始,然后是字段定义的数据包(每个字段一个数据包),如果未设置则以 结束。
行数据部分与元数据部分类似,每行一个数据包,以 结尾。
现在说一下字段元数据和行数据的数据包。行数据包很简单,每个数据包一行。每个字段值以字符串类型发送。如果数据为空则为0xFB。元数据包括库名、表名、字段类型、字段长度、字符集等信息。见下图:
MySQL 执行语句协议就这么多,稍微复杂一点的是数据返回,一次性返回大量数据的情况后面会介绍,也是通过脚本验证的,由于太多,这里就不直接贴出来了,请点击我的网站下载()。同样,我只验证了今天的内容,后面会逐步推进。文章中有些超链接这里无法显示,可以点击阅读原文。
扫一扫在手机端查看
-
Tags : mysql通信协议_mysql通信协议 -- 语句执行
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。