双线服务器响应的不同类型

2021-03-17    分类: 网站建设

双线服务器响应的不同类型
一旦双线服务器收到命令,会执行命令,然后发送一个或多个响应包。本篇将讨论几种不同类型的响应。
数据域
数据域是许多双线服务器响应包的重要组件。一个数据域包括一个长度指定符序列,后面是实际的数据值。通过研究sql/pack.c中的net_store_length()定义可以理解长度指定符序列:
双线服务器响应的不同类型
正如你所看到的,如果length数值不超过251,那么代码将它保存在1个字节中。如果是251字节以上但装在两个字节中,则代码为其加上252这个数值前缀,然后将其写到接下来的两个字节中。如果两个字节不够而4个字节够用,则代码使用253作为代码,然后以长度占用后面的字节。如果4个字节不够,则代码使用254作为代码,然后存储在8个字节中。必须注意,代码后面的所有长度值都低字节优先存储。
有人可能会问,为什么把1字节长度限制为251,而net_store_length()中的个保留值却是252?代码251具有特殊的含义,它表明代码后面没有长度数值或数据,且该域的数值为SQL NULL。
为什么要这么复杂呢?大多数时候数据域都相当短,尤其是,如果一个查询返回大量记录或选择了大量列,那么,响应中将有大量这些内容。在这种情况下,每个域只要浪费1个字节,会积少成多形成庞大的系统开销。域长度超过250的机会相对较少,但即使是在这种情况下,浪费1字节也不会引入注意——因为双线服务器至少已经在发送253个字节:长度至少占用2字节,域值至少占用251字节。
紧跟在长度序列后面的是实际数据值,该值被转换为字符串表达式。
OK包
发送OK包则表示双线服务器成功执行了命令。发送OK包是对下列命令的响应:
双线服务器响应的不同类型
这一类型的包括用于不要求返回结构集的命令。然而它的格式却允许发送一些额外的状态信息,如修改记录的数目、自动生成的主键数值、或者字符串格式的状态消息。包体的结构收录在表4-8中。
双线服务器响应的不同类型
为了从双线服务器内部发送OK包,你必须调用send_ok()。
错误包
在处理命令时如果发生错误,双线服务器会以错误包进行响应。格式收录在表4-9中。
对状态字节区采用7字节限制的原因是,包体起始处的十进制254字节可以具有不同的含义:可以使用本篇前文的“数据域”中描述的域长度格式来指定结构集中的域的数目。
为了发送一个EOF包,双线服务器会使用send_eof()。
结果集包
大量查询产生一个结果集,具体例子有SELECT、SHOW、CHECK、REPAIR、EXPLAIN。只要所期望的来自查询的信息多于简单的状态报告,会返回结果集。结果集包含一系列包。
.包体包括标准长度指定符序列的包,不过目前的数值含义不一样,它指的是结果集中的域的数目。
.一组域描述符包,每个域一个包,采用结果集中的域顺序。
.EOF结束包
域描述包的包体格式如表4-11和4-12所示。
双线服务器响应的不同类型
在发送各个包的域定义序列之后,双线服务器接着发送数据的实际行,每行一个包。每行数据包包含一系列以标准域数据格式存储的数值。在报告常规查询结果时,域数据会转换为字符串格式。在使用预处理语句(COM_PREPARE)时,域数据以本来格式发送,低字节优先。
在发送出所有的数据行后,以EOF包终止包序列。

分享名称:双线服务器响应的不同类型
本文地址:https://www.cdcxhl.com/news/105374.html

成都网站建设公司_创新互联,为您提供全网营销推广品牌网站设计网站改版网站策划网站导航搜索引擎优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营