在命令阶段,客户端发送command packet,其sequence-id为[00]:
13 00 00 00 03 53 ...
01 00 00 00 01
^^- command-byte
^^---- sequence-id == 0payload的第一个字节描述了命令类型,如下:
| 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 1COM_QUERY Response查询响应数据包是一个元数据包,可以是以下之一:

注意:如果打开
CLIENT_DEPRECATE_EOF,则发送OK_Packet而不是实际的EOF_Packet数据包。
COM_STMT_EXECUTECOM_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 ...fooiteration-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_PacketERR_PacketBinary Protocol Resultset