mysql.exec
mysql.exec
功能
执行不需要返回结果集的 SQL。普通绑定执行一次;binds 批量配置会按 batch/workers 执行。
语法
mysql(dsn).query(sql).exec()
参数
无参数。
返回值
| 类型 | 说明 |
|---|---|
| Object | 返回 SQL 执行统计对象。 |
执行结果字段
| 字段 | 类型 | 必定存在 | 说明 |
|---|---|---|---|
| total | Int | 是 | 本次执行处理的绑定行数。普通 bind() 执行时为 1;批量 binds() 执行时为绑定数组行数;无绑定行时为 0。 |
| rows_affected | Int | 是 | 数据库报告的受影响行数。批量执行时为各批次累加值。 |
| last_insert_id | Int | 是 | 数据库报告的最后插入 ID。批量执行时取各批次返回值中的最大值。 |
| batch_count | Int | 是 | 实际拆分执行的批次数。普通执行通常为 1;无绑定行时为 0。 |
| batch_size | Int | 是 | 当前查询构建器配置的批大小。未调用 batch() 时使用默认值。 |
| workers | Int | 是 | 当前查询构建器配置并规范化后的并发工作数。 |
示例
db = mysql('mysql://user:pass@127.0.0.1/test') ret = db.query('insert into user(name) values (?)').bind('BT').exec() result = ret.rows_affected // 输出示例:1 echo(result)
注意事项
- 普通
bind()执行默认复用按 DSN 分组的 MySQL 全局连接池。 -
binds()批量执行仍按本次workers()创建临时连接池,避免全局池改变批量并发边界。 - 简单 INSERT ... VALUES (?, ?) 会自动合并为多值插入。
- UPDATE、DELETE 不会自动拼接 SQL,会按批次逐条执行。
- 单次调用受
BT_MYSQL_QUERY_TIMEOUT_MS限制。