我想一口气将6406个脚架插入一张桌子,而无需准备和执行单独的记录。 (最快的)。在下面的代码中,我希望每次插入时都更改“ i”
我已经尝试了一切
for( int i = 0; i < 6406 ; i++)
{
sprintf( query, "INSERT INTO table1"
"(table_id, curr_id, cur_ref_id) "
"VALUES (%d,%d,%d)",
table_id,
i,
table_id);
//assemble query
DBH->prepare(query);
}
DBH->execute();
表1的插入准备失败
答案 0 :(得分:0)
我对MySQL C API的记忆有点模糊,但是IIRC应该看起来像这样:
MYSQL_STMT* stmt = mysql_stmt_init(MYSQL *mysql);
mysql_stmt_prepare(stmt,
"INSERT INTO table1 (table_id, curr_id, cur_ref_id) VALUES (?,?,?)",
len_of_previous_argument);
MYSQL_BIND params[3];
memset(params, 0, sizeof(params));
params[0].buffer_type = MYSQL_TYPE_LONG;
params[1].buffer_type = MYSQL_TYPE_LONG;
params[2].buffer_type = MYSQL_TYPE_LONG;
params[0].buffer = &table_id;
params[2].buffer = &table_id;
mysql_bind_param(stmt, params);
mysql_autocommit(conn, 0);
for ( int i = 0; i < 6406 ; i++) {
params[1].buffer = &i;
mysql_stmt_execute(stmt);
}
mysql_commit(conn);
mysql_stmt_close(stmt);
您显然希望进行一些错误处理,但这应该可以为您提供基本的思想。
仅使用一个参数来对查询字符串中的table_id
值进行编码可能会更快,但是我很懒,您显然已经知道该怎么做(snprintf
应该具有“ (%d,?,%d)”,然后将结果传递到mysql_stmt_prepare
,则params数组将只是一个项目。