在命令阶段,客户端发送command packet,其sequence-id
为[00]:
13 00 00 00 03 53 ...
01 00 00 00 01
^^- command-byte
^^---- sequence-id == 0
payload
的第一个字节描述了命令类型,如下:
Hex | Constant Name |
---|---|
00 | COM_SLEEP |
01 | COM_QUIT |
02 | COM_INIT_DB |
03 | COM_QUERY |
04 | COM_FIELD_LIST |
05 | COM_CREATE_DB |
06 | COM_DROP_DB |
07 | COM_REFRESH |
08 | COM_SHUTDOWN |
09 | COM_STATISTICS |
0a | COM_PROCESS_INFO |
0b | COM_CONNECT |
0c | COM_PROCESS_KILL |
0d | COM_DEBUG |
0e | COM_PING |
0f | COM_TIME |
10 | COM_DELAYED_INSERT |
11 | COM_CHANGE_USER |
12 | COM_BINLOG_DUMP |
13 | COM_TABLE_DUMP |
14 | COM_CONNECT_OUT |
15 | COM_REGISTER_SLAVE |
16 | COM_STMT_PREPARE |
17 | COM_STMT_EXECUTE |
18 | COM_STMT_SEND_LONG_DATA |
19 | COM_STMT_CLOSE |
1a | COM_STMT_RESET |
1b | COM_SET_OPTION |
1c | COM_STMT_FETCH |
1d | COM_DAEMON |
1e | COM_BINLOG_DUMP_GTID |
1f | COM_RESET_CONNECTION |
这些command属于:
COM_QUERY
发送基于文本协议的SQL查询,执行立即开始。响应COM_QUERY Response
。
有效负载如下:
Type | Name | Description |
---|---|---|
int<1> | command | 0x03 : COM_QUERY |
string<EOF> | query | 要执行的SQL查询的文本 |
示例:
21 00 00 00 03 73 65 6c 65 63 74 20 40 40 76 65 !....select @@ve
72 73 69 6f 6e 5f 63 6f 6d 6d 65 6e 74 20 6c 69 rsion_comment li
6d 69 74 20 31 mit 1
COM_QUERY Response
查询响应数据包是一个元数据包,可以是以下之一:
注意:如果打开
CLIENT_DEPRECATE_EOF
,则发送OK_Packet
而不是实际的EOF_Packet
数据包。
COM_STMT_EXECUTE
COM_STMT_EXECUTE
要求服务器执行由stmt_id
标识的准备好的语句。
它以Binary Protocol Value
形式发送准备好的语句的占位符的值(如果包含)。每个参数的类型由两个字节组成:
Protocol::ColumnType
中的类型用于此数据包的num_params
必须与相应的准备好的语句的COM_STMT_PREPARE_OK
的num_params
匹配。
响应COM_STMT_EXECUTE Response
COM_STMT_EXECUTE:
COM_STMT_EXECUTE
execute a prepared statement
direction: client -> server
response: COM_STMT_EXECUTE Response
payload:
1 [17] COM_STMT_EXECUTE
4 stmt-id
1 flags
4 iteration-count
if num-params > 0:
n NULL-bitmap, length: (num-params+7)/8
1 new-params-bound-flag
if new-params-bound-flag == 1:
n type of each parameter, length: num-params * 2
n value of each parameter
example:
12 00 00 00 17 01 00 00 00 00 01 00 00 00 00 01 ................
0f 00 03 66 6f 6f ...foo
iteration-count
总是为1。
flags
如下:
Flags | Constant Name |
---|---|
0x00 | CURSOR_TYPE_NO_CURSOR |
0x01 | CURSOR_TYPE_READ_ONLY |
0x02 | CURSOR_TYPE_FOR_UPDATE |
0x04 | CURSOR_TYPE_SCROLLABLE |
null_bitmap
就像Binary Protocol Resultset Row
的NULL-bitmap
一样,只是它的bit_offset
为0。
COM_STMT_EXECUTE Response
与COM_QUERY
响应类似,COM_STMT_EXECUTE
返回以下之一:
OK_Packet
ERR_Packet
Binary Protocol Resultset