数据库事务

介绍

数据库事务节点用于将一组数据库操作放入同一个事务中执行。适合需要保证多步数据处理“全部成功或全部回滚”的场景,例如创建订单后扣减库存、写入明细、更新状态等。

事务节点目前只支持数据库数据源。节点内同一数据源的数据操作会自动纳入该事务;其他数据源不会使用该事务。

创建节点

在工作流配置界面中,点击流程中的加号(“+”)按钮,添加“数据库事务”节点。

20260610205146

创建后会生成两个分支:

  • 执行:事务内执行的主分支。该分支全部成功时,事务自动提交;任意节点失败或出错时,事务自动回滚。
  • 回滚后:回滚后执行的分支。该分支在事务外执行,可用于记录日志、发送通知、执行补偿处理等。

20260610205303

节点配置

20260610205505

数据源

选择该事务控制的数据库数据源。只有同一数据源的数据操作节点会自动纳入事务。

隔离级别

设置事务隔离级别,默认值为 READ UNCOMMITTED。如业务需要更严格的数据一致性,可根据数据库能力和并发要求选择其他隔离级别。

回滚后继续执行工作流

开启后,回滚后 分支执行完成后,工作流会继续执行事务节点后面的节点。

关闭时,回滚后 分支执行完成后,工作流会在事务节点处结束,不再继续后续节点。

使用方法

约束

执行 分支内不支持使用会挂起流程的异步节点,例如人工处理、延时等。事务需要在当前执行过程中完成提交或回滚,如果 执行 分支进入等待状态,系统会回滚事务并将流程标记为失败。

回滚后 分支不在事务内执行,因此不受上述限制。可以根据业务需要在该分支中使用异步节点,例如发送请求、等待人工确认或延时处理。

注意

事务会占用数据库连接直到提交或回滚。请避免在 执行 分支中编排长耗时操作,尽量只放必要的数据读写和判断逻辑。

嵌套事务

事务节点可以嵌套使用,但需要注意数据源范围:

  • 内层事务与外层事务使用同一数据源时,会在外层事务范围内创建嵌套事务,由数据库和 Sequelize 按对应能力处理。
  • 内层事务使用不同数据源时,不会复用外层事务,会为该数据源创建独立事务。
  • 如果工作流由同步的数据表事件触发,触发器本身可能已经提供同一数据源的顶层事务。事务节点会优先复用同一数据源的外层事务,不会复用不同数据源的事务。

嵌套事务会增加理解和排错成本。通常建议只在确实需要局部回滚边界时使用嵌套事务,否则优先用一个事务节点包裹完整的数据处理流程。

常见场景

一个典型流程如下:

  1. 执行 分支中查询或创建相关数据。
  2. 继续在 执行 分支中更新库存、状态、明细等同一数据源的数据。
  3. 如果全部成功,事务自动提交。
  4. 如果任意节点失败或出错,事务自动回滚,并进入 回滚后 分支。
  5. 回滚后 分支中记录失败原因、发送通知或执行补偿逻辑。

如果需要在回滚后继续执行后续流程,请开启“回滚后继续执行工作流”。