MysqlTransaction
MysqlTransaction
功能
MySQL 事务句柄。事务内 SQL 按顺序复用同一个底层事务,适合需要原子提交或回滚的多条 SQL。
语法
tx = mysql(dsn).begin() tx.query(sql).bind(value).exec() tx.commit()
方法
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| query(sql) | sql:String | MysqlTransaction | 设置事务内 SQL。 |
| bind(value1, value2, ...) | 任意值 | MysqlTransaction | 追加绑定参数。 |
| all() | 无 | Array | 执行查询并返回多行。 |
| one() | 无 | Object/empty | 执行查询并返回单行;没有结果返回 empty。 |
| exec() | 无 | Object | 执行写入 SQL,返回 rows_affected 等统计字段。 |
| commit() | 无 | Bool | 提交事务,成功返回 true。 |
| rollback() | 无 | Bool | 回滚事务,成功返回 true。 |
| close() | 无 | Bool | 活动事务会回滚并关闭;已经结束时返回 false。 |
| status() | 无 | String | 返回 active、committed、rolled_back、closed 或 failed。 |
| sql(render_binds) | Bool,可选 | String | 返回 SQL 预览文本;默认渲染绑定参数。 |
返回值
| 类型 | 说明 |
|---|---|
| MysqlTransaction | query/bind 返回新的轻量构建器,但共享同一个事务状态。 |
| Bool | commit、rollback、close 的状态结果。 |
| String | status 或 sql 的文本结果。 |
代码示例
db = mysql('mysql://user:pass@127.0.0.1/test') tx = db.begin() tx.query('update user set name=? where id=?').bind('BT', 1).exec() status = tx.status() tx.rollback() // 输出:active echo(status)
注意事项
- 不要并发复用同一个事务对象;事务执行期间再次使用会报错。
- 事务内暂不支持 binds、batch、workers 批量执行配置。
- 未 commit 的事务应调用 rollback 或 close;对象被丢弃时 SQLx 会尝试回滚,但脚本应显式关闭资源。
-
BT.stats().mysql.transactions_active可用于观察当前活动事务数量。