mysql版本:5.1.45
开发环境:vs2008 sprintf_s(szSql, sizeof(szSql), "select * from postTmp order by autoid");
if(mysql_query(&mysql, szSql))
{
LogMessage(mysql_error(&mysql));
mysql_close(&mysql);
return ;
}
MYSQL_RES* pResult =mysql_use_result(&mysql);
if(!pResult)
{
LogMessage(mysql_error(&mysql));
return ;
}
MYSQL_ROW row;
char szId[40];
while((row =mysql_fetch_row(pResult)))
{
strcpy_s(szId, sizeof(szId), row[1]);
//进行数据处理……
Sleep(1000); sprintf_s(szSql, sizeof(szSql), "delete from postTmp where id='%s'", szId);
if(mysql_query(&myConn, szSql))
LogMessage(mysql_error(&myConn));
}//while((row =mysql_fetch_row(pResult))) end
mysql_free_result(pResult);
mysql_close(&myConn);
mysql_close(&mysql);一直卡在delete那,有没有什么办法可以解决的??

解决方案 »

  1.   

    检查一下锁,和进程状态
    show processlist;
      

  2.   

    就是Select 的语句状态是Writing to net 
    Delete 语句状态是locked
      

  3.   

    简单地看了一下你的代码逻辑,你是在读取结果集的循环里头,(也就是读取的结果集没有关闭之前),又嵌套执行了对同一个表的delete操作,这样就造成你描述的问题了。
    而且我看到的是人用的是MYSQL_RES* pResult =mysql_use_result(&mysql);
    它表示服务器端始终要存着一份结果集。解决尝试的办法:
    1. 不使用嵌套,将你要删除的id,存到数组里头,然后再执行逐个删除
    2. 使用嵌套,但读取结果集以后,使用mysql_store_result代替mysql_use_result. 此方法不一定保证好使,但需要你的实验来验证。