雙線服務器響應的不同類型
一旦雙線服務器收到命令,會執行命令,然后發送一個或多個響應包。本篇將討論幾種不同類型的響應。
數據域
數據域是許多雙線服務器響應包的重要組件。一個數據域包括一個長度指定符序列,后面是實際的數據值。通過研究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包終止包序列。
網站欄目:雙線服務器響應的不同類型
轉載來源:http://m.newbst.com/news24/105374.html
成都網站建設公司_創新互聯,為您提供響應式網站、軟件開發、微信小程序、靜態網站、Google、網站營銷
廣告
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源:
創新互聯