
MySQL 端口中的 Select 操作用于从 MySQL 数据库中查询数据,并将查询结果输出为 XML 消息,供工作流下游端口(如 XML Map、EDI、File 等)进一步处理。
场景 | 说明 | 示例 |
|---|---|---|
定时拉取待处理业务数据 | 按固定频率查询符合条件的新增或待处理记录 | 每5分钟查询一次 status = 0 的订单 |
条件过滤后输出 | 根据业务状态、时间范围等条件筛选数据并输出为 XML | 查询当天创建的客户信息 |
读取后自动更新状态 | 成功提取记录后更新状态位,防止重复处理 | 查询后将 status 从 0 改为 1 |
操作 | 方向 | 作用 |
|---|---|---|
Select(本文) | 数据库 → 工作流 | 从数据库中 读取 数据,输出 XML 消息 |
Upsert | 工作流 → 数据库 | 将传入的 XML 消息内容 写入 数据库(插入或更新) |
Lookup | 工作流 → 数据库 → 工作流 | 根据传入消息中的字段值,查询 数据库并补充字段到消息中 |
Lookup 存储过程 | 工作流 → 数据库 → 工作流 | 根据当前消息中的字段值调用存储过程,并将结果补充回当前消息 |
执行存储过程 | 工作流 → 数据库 → 工作流 | 执行数据库存储过程,由存储过程完成查询、更新或业务处理逻辑 |
关于
Upsert和Lookup的详细配置,请参考对应的专项文档。
使用 MySQL 端口前,需要先创建 MySQL 连接。连接创建后可以被多个 MySQL 端口复用。
进入工作流页面,鼠标右键选择“添加端口”,搜索并选择 MySQL,填写端口 ID,创建Mysql端口。

进入 MySQL 端口的设置页面,在“连接” 下拉框旁点击“添加新连接”。
也可以从全局入口创建:
系统设置 > 连接 > 添加连接 > MySQL
配置项 | 说明 | 示例 |
|---|---|---|
连接名称 | 连接名称 | MySQL1 |
Server | MySQL 服务器地址 | 192.168.0.0 |
Port | MySQL 端口 | 3306 |
Database | 数据库名 | test |
User | 用户名 | user |
Password | 密码 | 123456 |
填写完成后点击右上角的 添加并测试,如果连接有问题,则会在右下角报错,反之如果连接成功,则会跳转回设置界面。

Select 用于从 MySQL 中查询记录,并将查询结果输出为 XML。它通常放在工作流开头。
场景 | 示例 |
|---|---|
查询待处理订单 | 查询 status = 0 的订单 |
查询主数据 | 查询客户、物料、供应商信息 |
定时拉取数据 | 每 5 分钟从数据库取一次新增记录 |
本文示例以订单主表(test_order_header) 和订单明细表(test_order_item) 为例,演示如何通过 Select 同时查询主表和明细表,并输出为嵌套 XML。
查询目标:
需求 | 说明 |
|---|---|
查询条件 | 只查询 header 表中 status = 0(待处理)的订单 |
关联关系 | item 表的 header_id 必须等于 header 表的 id,即明细行只属于当前订单 |
处理后动作 | 查询完成后,将 header 表的 status 更新为 1,避免下次重复拉取 |
最终输出的 XML 结构为:一个订单头下挂载其对应的所有订单明细行。
基本配置步骤:


父表和子表,或联接表,本次示例选择父表和子表。结构类型 | 说明 | 适用场景 |
|---|---|---|
父表和子表 | 按父子层级查询,输出嵌套 XML | 订单头 + 订单明细 |
联接表 | 使用 JOIN 合并多个表,输出一个结果结构 | 报表类、扁平结构输出 |

5. 选择你要select的表,先选择父表(test_order_header),然后在右侧点击添加子项表,勾选子表(test_order_item)。

添加完成后,点击右下角应用,返回端口主界面,此时就能看到已选中的父表和子表结构了。

6. 添加主表过滤条件。
将鼠标悬浮在要添加条件的表名上,点击表选项

选择表设置,进入编辑界面


点击过滤器,选择添加过滤器

本示例要查询 status = 0 的数据,按下图配置过滤条件:

配置完成后点击 应用。
test_order_item)需要通过 header_id 字段关联到父表(test_order_header)的 id 字段,以确保每个子表记录只属于其对应的父表记录。
如下图所示,添加过滤器,先在左边下拉框选择子表的header_id列,然后在最右边选择REF,中间的运算符选择相等,最后在运算符右边栏位选择父表的id列。

配置说明:上述配置生成的 SQL 关联条件等价于 test_order_item.header_id = test_order_header.id。选择 REF 而非 CONST(常量值),是因为 header_id 需要动态匹配每条父表记录的 id,而非固定值。
test_order_header,即可重新进入添加表结构界面

点击右上角的代码视图,则可以查看当前配置完成的select代码

点击右上角的预览XML,则可以预览select查询的结果

status,填写值为 1。这样查询完成后,test_order_header 表中被查到的记录会自动将 status 更新为 1。该更新发生在 MySQL Select 成功提取记录时,不代表下游端口已全部处理成功。

本示例仅更新父表状态位,子表状态如需同步更新,需要单独在代码视图处进行设置。

Select 支持两种常见结构类型。
结构类型 | 说明 | 适用场景 |
|---|---|---|
父表和子表 | 按父子层级查询,输出嵌套 XML | 订单头 + 订单明细 |
联接表 | 使用 JOIN 合并多个表,输出一个结果结构 | 报表类、扁平结构输出 |
当前 TEST_MySQL 端口中的 Select 代码 模板如下图:

重点说明:
配置 | 作用 |
|---|---|
WHERE status = '0' | 只查询待处理订单 |
WHERE header_id = ${id} | 子表按父表 id 查询明细 |
status updateValue="1" | MySQL端口查询并处理该行时将状态更新为1 |
输出 XML 示例:
<Items>
<test_order_header>
<id>1</id>
<buyerNo>BUYER001</buyerNo>
<poNo>PO20260827001</poNo>
<status>0</status>
<test_order_item>
<id>10</id>
<header_id>1</header_id>
<poLineNo>1</poLineNo>
<quantity>100</quantity>
</test_order_item>
</test_order_header>
</Items>Select 端口配置完成后,可以通过手动接收进行测试,也可以在“自动化”页面设置定时查询数据库。
第一次配置完成后,建议先手动测试,不要马上开启自动化。
操作步骤:
如果输出成功,说明 MySQL 端口已经可以按当前 Select 配置从数据库读取数据。
Select 成功后,MySQL 端口会将查询结果输出为 XML。对于父表和子表结构,输出通常是嵌套结构。
示例:
<Items>
<test_order_header>
<id>1</id>
<buyerNo>B01</buyerNo>
<currency>USD</currency>
<poDate>2026-08-25T11:36:05.0000+08:00</poDate>
<poNo>PO001</poNo>
<status>0</status>
<test_order_item>
<id>2</id>
<buyerItemNO>ITEM001</buyerItemNO>
<header_id>1</header_id>
<poLineNo>1</poLineNo>
<quantity>1000</quantity>
<requestDeliveryDate>2026-09-30T11:36:39.0000+08:00</requestDeliveryDate>
<status>0</status>
</test_order_item>
</test_order_header>
</Items>检查输出 XML 时,重点确认以下内容:
检查项 | 说明 |
|---|---|
父表数据是否正确 | 例如订单头字段是否完整 |
子表数据是否正确 | 例如明细行是否只属于当前订单 |
字段类型是否正确 | 日期、数字字段是否按预期输出 |
是否存在重复数据 | 如果重复,检查过滤条件和状态位 |

手动测试成功后,可以配置自动化,让 Select 端口定时从 MySQL 查询数据。
进入自动化界面,勾选启用自动接收,开启后,端口会按设定的接收间隔自动查询 MySQL 数据源。支持多种调度模式

以下设置在 Select 场景中较为常用,决定查询结果如何输出。
配置项 | 说明 | 建议 |
|---|---|---|
输出文件格式 | 输出数据的格式,支持 XML、 CSV、 TSV | 默认 XML,便于下游端口(如 XML Map、EDI)处理;包含子表的复杂结构不支持 CSV 和 TSV |
最大记录数 | 单个输出消息中包含的最大记录数 | 0 表示端口根据输出格式自行决定;-1 表示所有记录放入单个文件 |
本地文件名格式 | 输出文件的命名规则,支持宏 | 建议包含 %ShortDate% 或 %MessageId%,便于追溯 |
本地文件名格式常用宏示例:
宏 | 含义 |
|---|---|
%ConnectorID% | 当前端口 ID |
%ShortDate% | 当前日期(如 2026-08-28) |
%MessageId% | 当前输出消息的唯一 ID |
%Table% | 查询的表名 |
示例命名:
MysqlSelect_%ShortDate%_%MessageId%连接池管理数据库连接的复用,减少每次查询创建新连接的开销。
配置项 | 说明 | 建议 |
|---|---|---|
使用连接池 | 是否启用连接池 | 建议启用,可提升频繁查询时的性能 |
连接池最大数量 | 池中允许的最大连接数 | 默认 100,按实际并发需求调整 |
连接池最小数量 | 池中维护的最小连接数 | 默认 1,保持默认即可 |
连接池等待时间 | 请求等待可用连接的最大秒数 | 默认 60,超时后返回错误 |
连接池空闲超时时间 | 连接在池中保持空闲的最长时间(秒) | 默认 60,超时后连接会被关闭 |

日志设置影响问题排查效率,尤其是 SQL 条件、父子表关联和状态位更新问题的定位。
配置项 | 说明 | 建议 |
|---|---|---|
日志级别 | 控制日志详细程度 | 日常使用 Info;排查时改为 Debug,可查看实际执行的 SQL |
保留消息副本 | 是否在日志目录保存消息副本 | 建议开启,方便查看输入输出文件 |
日志文件夹结构 | 按时间分组保存日志 | 日志量大时建议按 Weekly 或 Daily 分组 |
查询超时时间 | SQL 命令执行超时时间(秒) | 查询慢或数据量大时适当调大 |


排查 Select 问题时,建议先临时将日志级别改为 Debug,手动点击“接收文件”,然后在事务日志中查看实际执行的 SQL,确认查询条件是否正确。
在 MySQL Select 端口的事务页面,可以查看每次手动接收或自动接收产生的记录。它是排查 Select 问题最常用的位置。
Select 查询成功后,事务页面会生成一条记录。点击文件名,可以查看或下载输出 XML。
重点查看:
检查项 | 说明 |
|---|---|
输出 XML 是否生成 | 判断 Select 是否查询到数据 |
父表字段是否完整 | 判断表字段是否勾选正确 |
子表节点是否正确 | 判断父子表关联是否正确 |
status 是否符合预期 | 判断状态位更新前后的数据是否正常 |

展开事务记录后,可以查看端口本次执行的详细日志。排查时重点关注以下内容:
日志内容 | 作用 |
|---|---|
实际执行的 SQL | 确认过滤条件是否正确 |
查询返回记录数 | 判断数据库是否查到数据 |
子表查询语句 | 判断 header_id = ${id} 是否生效 |
状态位更新语句 | 判断 updateValue 是否执行 |
错误堆栈 | 判断是否为连接、权限、SQL 或字段问题 |
提示:如果日志内容不够详细,可以临时将日志级别改为
Debug后重新测试。问题确认后再改回Info。
可能原因:
排查建议:
3306 或实际 MySQL 端口。SELECT 权限。可能原因:
status = 0 的数据已经被处理成 status = 1。排查建议:
如果子表输出过多、过少或和父表对不上,通常是父子表关联条件有问题。
重点检查:
检查项 | 示例 |
|---|---|
子表外键是否正确 | test_order_item.header_id |
父表字段是否正确 | test_order_header.id |
子表条件是否正确 | header_id = ${id} |
子表是否挂在正确父表下 | test_order_item 应在 test_order_header 下 |
如果配置了读取后更新 status,但数据库中状态没有变化,可以按以下方向排查:
检查项 | 说明 |
|---|---|
主键是否识别 | 表中应有主键字段,例如 id key="true" |
更新字段是否配置正确 | 例如 <status updateValue="1" /> |
当前记录是否成功输出 | 只有 MySQL Select 成功提取该行后才会更新 |
数据库用户是否有 UPDATE 权限 | 只有 SELECT 权限无法更新状态 |
日志中是否有更新 SQL | Debug 日志可查看状态位更新动作 |
排查 Select 问题时,可以临时将日志级别改为 Debug,然后重新点击“接收文件”。
日志中重点查看:
日志内容 | 作用 |
|---|---|
实际执行的 SQL | 判断查询条件是否正确 |
返回记录数 | 判断是否查到数据 |
子表查询 | 判断父子表关联是否正确 |
更新状态位 SQL | 判断 updateValue 是否执行 |
MySQL Select 端口的作用是从 MySQL 数据库中查询数据,并将结果输出为知行之桥可以继续处理的 XML。
配置 Select 时,建议按以下顺序操作:
status = 0。header_id = ${id}。对于订单头和订单明细这类一对多业务,推荐使用“父表和子表”结构;对于报表类或扁平数据输出,可以使用“联接表”结构。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。