MysqlTransaction

MysqlTransaction

MysqlTransaction

功能

MySQL 事务句柄。事务内 SQL 按顺序复用同一个底层事务,适合需要原子提交或回滚的多条 SQL。

语法

方法

方法参数返回值说明
query(sql)sql:StringMysqlTransaction设置事务内 SQL。
bind(value1, value2, ...)任意值MysqlTransaction追加绑定参数。
all()Array执行查询并返回多行。
one()Object/empty执行查询并返回单行;没有结果返回 empty。
exec()Object执行写入 SQL,返回 SQL 执行统计对象;字段见下方。
commit()Bool提交事务,成功返回 true。
rollback()Bool回滚事务,成功返回 true。
close()Bool活动事务会回滚并关闭;已经结束时返回 false。
status()String返回 active、committed、rolled_back、closed 或 failed。
sql(render_binds)Bool,可选String返回 SQL 预览文本;默认渲染绑定参数。

返回值

类型说明
MysqlTransactionquery/bind 返回新的轻量构建器,但共享同一个事务状态。
Arrayall 返回行对象数组。行对象字段见下方“查询行对象字段”。
Object/Emptyone 有结果时返回单行对象;没有结果时返回 empty。行对象字段见下方“查询行对象字段”。
Objectexec 返回 SQL 执行统计对象。字段见下方“exec 返回对象字段”。
Boolcommit、rollback、close 的状态结果。
Stringstatus 或 sql 的文本结果。

查询行对象字段

all()one() 返回的行对象是动态对象,字段来自 SQL 结果集列名。

字段类型必定存在说明
任意列名Any数据库返回的列值。字段名是结果集列名;字段不存在时读取结果为 empty。数据库 NULL 返回 null

exec 返回对象字段

字段类型必定存在说明
totalInt本次事务内 exec() 处理的绑定行数。事务内暂不支持 binds() 批量执行,因此当前固定为 1
rows_affectedInt数据库报告的受影响行数。
last_insert_idInt数据库报告的最后插入 ID。
batch_countInt实际拆分执行的批次数。事务内暂不支持批量执行,因此当前固定为 1
batch_sizeInt当前执行的批大小。事务内暂不支持 batch(),因此当前为 0
workersInt当前执行使用的并发工作数。事务内按顺序复用同一个底层事务,因此当前为 1

代码示例

注意事项

  • 不要并发复用同一个事务对象;事务执行期间再次使用会报错。
  • 事务内暂不支持 binds、batch、workers 批量执行配置。
  • 未 commit 的事务应调用 rollback 或 close;对象被丢弃时 SQLx 会尝试回滚,但脚本应显式关闭资源。
  • BT.stats().mysql.transactions_active 可用于观察当前活动事务数量。