mysql.exec_many
mysql.exec_many
功能
并发执行同一条 SQL 的多组绑定参数,适合批量写入和数据库压力测试。
语法
mysql(dsn).query(sql).exec_many(params, concurrency)
参数
-
params: Array,必填
? 占位符。
-
concurrency: Int,选填
10,有效范围 1 到 4096。
返回值
Object:包含 total、rows_affected、last_insert_id、concurrency。
代码示例
db = mysql('mysql://user:p%40ss@127.0.0.1/test') params = [] i = 0 while i < 10000 { params.push(['测试' + i, true, date().format('%Y-%m-%d %H:%M:%S')]) i += 1 } ret = db.query('insert into user(name, sex, create_time) values (?, ?, ?)') .exec_many(params, 100) echo(ret)
注意事项
-
exec_many()使用连接池限制并发,不会一次性打开超过concurrency的连接。 -
concurrency控制 MySQL 连接池大小,不等于运行器线程数;例如传1000会尝试维持最多 1000 条 MySQL 连接,但不会创建 1000 个系统线程。 - 每一行都会独立执行一次 SQL;如果需要单条 SQL 多值插入,可自行拼接
insert ... values (...), (...)。 - 并发压测会明显增加数据库负载,请先确认测试库可被清空或写入。