# mysql.exec ## 功能 执行不需要返回结果集的 SQL。普通绑定执行一次;binds 批量配置会按 batch/workers 执行。 ## 语法 ```bt 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 | 是 | 当前查询构建器配置并规范化后的并发工作数。 | ## 示例 ```bt 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` 限制。