您的位置:首页 > 数据库 > MySQL

mysql协议学习(三)--OK报文

2015-08-06 22:42 756 查看
Payload of OK Packet

TypeNameDescription
int<1>
header
[00]
or
[fe]
the
OK packet header
int<lenenc>
affected_rows
affected rows
int<lenenc>
last_insert_id
last insert-id
if capabilities & CLIENT_PROTOCOL_41 {
int<2>
status_flags
Status Flags
int<2>
warnings
number of warnings
} elseif capabilities & CLIENT_TRANSACTIONS {
int<2>
status_flags
Status Flags
}
if capabilities & CLIENT_SESSION_TRACK {
string<lenenc>
info
human readable status information
if status_flags & SERVER_SESSION_STATE_CHANGED {
string<lenenc>
session_state_changes
session state
info
}
} else {
string<EOF>
info
human readable status information
}
对于执行成功的命令,通常会返回OK报文

OK报文和EOF报文的区别

对于OK报文和EOF报文,其header字段都可能为0xfe,那么有如下规则来区分这两种报文
OK Packet:length of packet > 7

EOF Packet:length of packet < 9

eg:

OK with CLIENT_PROTOCOL_41. 0 affected rows, last-insert-id was 0, AUTOCOMMIT enabled, 0
warnings. No further info.

07 00 00 0200000002    0000 00

...........

Status Flags说明:

FlagValueComment
SERVER_STATUS_IN_TRANS
0x0001a transaction is active
SERVER_STATUS_AUTOCOMMIT
0x0002auto-commit is enabled
SERVER_MORE_RESULTS_EXISTS
0x0008
SERVER_STATUS_NO_GOOD_INDEX_USED
0x0010
SERVER_STATUS_NO_INDEX_USED
0x0020
SERVER_STATUS_CURSOR_EXISTS
0x0040Used by
Binary
Protocol Resultset
to signal that
COM_STMT_FETCH
must
be used to fetch the row-data.
SERVER_STATUS_LAST_ROW_SENT
0x0080
SERVER_STATUS_DB_DROPPED
0x0100
SERVER_STATUS_NO_BACKSLASH_ESCAPES
0x0200
SERVER_STATUS_METADATA_CHANGED
0x0400
SERVER_QUERY_WAS_SLOW
0x0800
SERVER_PS_OUT_PARAMS
0x1000
SERVER_STATUS_IN_TRANS_READONLY
0x2000in a read-only transaction
SERVER_SESSION_STATE_CHANGED
0x4000connection state information has changed
Session State Information
该部分信息由以下部分组成:

TypeNameDescription
int<1>
type
type of data
string<lenenc>
data
data of the changed session info
其中type有3种,分别是:

types of State Change Information

NameValueDescription
SESSION_TRACK_SYSTEM_VARIABLES
0x00
one or more system variables changed. See also:
session_track_system_variables
SESSION_TRACK_SCHEMA
0x01
schema changed. See also:
session_track_schema
SESSION_TRACK_STATE_CHANGE
0x02
"track state change" changed. See also:
session_track_state_change
不同type类型对应的data组成是不同的

SESSION_TRACK_SYSTEM_VARIABLES 对应的data字段内容

TypeNameDescription
string<lenenc>
name
name of the changed system variable
string<lenenc>
value
value of the changed system variable
eg:
SET autocommit = OFF

00 0f 0a 61 75 74 6f 63   6f 6d 6d 69 7403 4f 46
46

....autocommit.OFF

第1个字节00表示type=SESSION_TRACK_SYSTEM_VARIABLES,接下来的部分组成为data字段,类型是string<lenenc>,其中第1个字节0f表示接下来的字符串长度为15个字节(0x0f = 15),而SESSION_TRACK_SYSTEM_VARIABLES的data字段又分为两个字段 name(string<lenenc>)和 value(string<lenenc>),那么接下来的 0a
61 75 74 6f 63 6f 6d 6d 69 74 (len = 0x0a) 和 03
4f 46 46 (len = 0x03)则分别为name字段和value字段的内容。

SESSION_TRACK_SCHEMA 对应的data字段内容

TypeNameDescription
string<lenenc>
name
name of the changed schema
eg:
USE test

01 05 04 74 65 73 74

...test

第1个字节01表示type=SESSION_TRACK_SCHEMA,接下来的部分组成为data字段,类型是string<lenenc>,其中第1个字节05表示接下来的字符串长度为5个字节,data字段内容为 04
74 65 73 74(len = 0x04)

SESSION_TRACK_STATE_CHANGE 对应的data字段内容

备注:A flag byte that indicates whether session state changes occurred. This flag is represented as an ASCII value

TypeNameDescription
string<lenenc>
is_tracked
[31]
("1") if state tracking got enabled.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: