mysql 批量更新数据

tan625747 2012-11-11 12:59:43



MYSQL m_connection;
bool ReadUrl()
{
mysql_init(&m_connection);
mysql_real_connect(&m_connection, "127.0.0.1", "root", "111","test",0,NULL,CLIENT_FOUND_ROWS);

mysql_query(&m_connection, "set names gb2312");
char sql[1024] = "select idcraw, tagname from craw where tagname != \"\"";

MYSQL_RES *results;
if (!mysql_query(&m_connection, sql))
{
results = mysql_store_result(&m_connection);
MYSQL_ROW row;

while (row = mysql_fetch_row(results))
{
std::string tagname(row[1]);

sprintf(sql,"update craw set tagname = 'new' where idcraw = '%s'",res.c_str(),row[0]);
if(!mysql_query(&m_connection, sql)) //执行失败
{
char err[1024];
sprintf(err,"Error %u:%s",mysql_errno(&m_connection),mysql_error(&m_connection));
cout<<"mysql_query failed:"<<err;
}
}
}
return true;
}


目的是想先查询每条记录,需要更新每条记录,不知道怎么实现,如上的实现方式,不能成功。
...全文
226 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
转角天边 2012-11-11
  • 打赏
  • 举报
回复
引用 7 楼 tan625747 的回复:
引用 6 楼 anhuizhuanjiao 的回复:引用 5 楼 tan625747 的回复:引用 4 楼 anhuizhuanjiao 的回复:在我记忆中mysql是不允许这样嵌套的 你先把数据都取出来,然后执行mysql_free_result(results); 再执行update操作 数据量在百万级? 我怕内存吃不消 百万级用mysql、 ……
客气了,共同学习
tan625747 2012-11-11
  • 打赏
  • 举报
回复
引用 6 楼 anhuizhuanjiao 的回复:
引用 5 楼 tan625747 的回复:引用 4 楼 anhuizhuanjiao 的回复:在我记忆中mysql是不允许这样嵌套的 你先把数据都取出来,然后执行mysql_free_result(results); 再执行update操作 数据量在百万级? 我怕内存吃不消 百万级用mysql
、 就用你告诉我的方法去处理了,只是运行起来比较慢。 是的,Mysql 于别的结合结合,还挺适合的。 分数全给你了,也不能代表我对您的感谢。
转角天边 2012-11-11
  • 打赏
  • 举报
回复
引用 5 楼 tan625747 的回复:
引用 4 楼 anhuizhuanjiao 的回复:在我记忆中mysql是不允许这样嵌套的 你先把数据都取出来,然后执行mysql_free_result(results); 再执行update操作 数据量在百万级? 我怕内存吃不消
百万级用mysql
tan625747 2012-11-11
  • 打赏
  • 举报
回复
引用 4 楼 anhuizhuanjiao 的回复:
在我记忆中mysql是不允许这样嵌套的 你先把数据都取出来,然后执行mysql_free_result(results); 再执行update操作
数据量在百万级? 我怕内存吃不消
转角天边 2012-11-11
  • 打赏
  • 举报
回复
在我记忆中mysql是不允许这样嵌套的 你先把数据都取出来,然后执行mysql_free_result(results); 再执行update操作
tan625747 2012-11-11
  • 打赏
  • 举报
回复
我有一个表craw表结构如下 idcraw    tagname 15002    a  b       15003    a  f       15004    a  d       15005    a  f      15007    a   a           把tagname空格去掉要更新为:     15002    a  b       15003    af       15004    ad       15005    af      15007    aa          mysql 批量更新数据,不知道怎么实现,如上的实现方式,不能成功。

MYSQL m_connection;
bool ReadUrl()
{
	mysql_init(&m_connection);
	mysql_real_connect(&m_connection, "127.0.0.1", "root", "111","test",0,NULL,CLIENT_FOUND_ROWS);	

	mysql_query(&m_connection, "set names gb2312");
	char sql[1024] = "select idcraw, tagname from craw where tagname != \"\"";

	MYSQL_RES *results;
	if (!mysql_query(&m_connection, sql))
	{
		results = mysql_store_result(&m_connection);
		MYSQL_ROW row;

		while (row = mysql_fetch_row(results))
		{
			std::string tagname(row[1]);
                          std::string res = tagname;//为去掉中间空格之后是字符串
			
			sprintf(sql,"update craw set tagname =  '%s'  where idcraw = '%s'",res.c_str(),row[0]);
			if(!mysql_query(&m_connection, sql))                //执行失败
			{
				char err[1024];
				sprintf(err,"Error %u:%s",mysql_errno(&m_connection),mysql_error(&m_connection));
				cout<<"mysql_query failed:"<<err;
			}
		}
	}
	return true;
}
tan625747 2012-11-11
  • 打赏
  • 举报
回复
引用 1 楼 anhuizhuanjiao 的回复:
查询每条记录select idcraw, tagname from craw 更新每条记录update craw set tagname = 'new' 这样就可以了
关键是上面的写法报错啊。
转角天边 2012-11-11
  • 打赏
  • 举报
回复
查询每条记录select idcraw, tagname from craw 更新每条记录update craw set tagname = 'new' 这样就可以了

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧