if (EXECUTE_ADO_OK == pDB->Execute(szCommand))
{
bOk = TRUE;
}else
{
memset(szCommand,0,sizeof(szCommand));
sprintf_s(szCommand, sizeof(szCommand), INSERT_PLAYERINFO,m_szTableName, m_playerID,m_leagueID,szDate,m_tKills,m_tDeath,m_tRound,m_ctKills,
m_ctDeaths,m_ctRound,m_kills,m_deaths,m_misplayer,m_);
if (EXECUTE_ADO_FALSE == pDB->Execute(szCommand))
{
WriteLog("CPlayerKill", "SaveProc failed");
bOk = FALSE;
}
else
{
bOk = TRUE;
}
}
upDate语句,同insert语句是正确的,但是就是会出现重复键的错误,我是采用多线程处理,写数据库的时候都会加锁, 重复键的问题是有时会出现 ??????????????????
{
bOk = TRUE;
}else
{
memset(szCommand,0,sizeof(szCommand));
sprintf_s(szCommand, sizeof(szCommand), INSERT_PLAYERINFO,m_szTableName, m_playerID,m_leagueID,szDate,m_tKills,m_tDeath,m_tRound,m_ctKills,
m_ctDeaths,m_ctRound,m_kills,m_deaths,m_misplayer,m_);
if (EXECUTE_ADO_FALSE == pDB->Execute(szCommand))
{
WriteLog("CPlayerKill", "SaveProc failed");
bOk = FALSE;
}
else
{
bOk = TRUE;
}
}
upDate语句,同insert语句是正确的,但是就是会出现重复键的错误,我是采用多线程处理,写数据库的时候都会加锁, 重复键的问题是有时会出现 ??????????????????
解决方案 »
- MYSQL建立索引问题....在线等
- 高分:mysql 如何写语句替换某字段中 所有汉字,只剩下英文字母和符号。
- mysql++ 1.7.9 + mysql 4.0.15的艰辛历程, 还是没有搞定, 请相助
- MySQL并发链接达1000个左右,如何优化?
- 请教mysql的问题
- 安装mysql的问题
- 停车场停车时长统计+++++++++++++
- max_allowed_packet 值自动重置为1M
- 求救,重新安装wamp启动mysql服务提示错误。代码1067
- [MySQL][ODBC 5.2(a) Driver][mysqld-8.0.11]Query execution was interrupted
- 请教:如何查看mysql数据定义操作的日志
- .sql文件字符集转换问题
{
return FALSE;
}
BOOL bOk = FALSE;
char szCommand[MAX_COMMANDELEN] = {0};
char m_szTableName[MAX_NAMELEN] = {0};
BOOL bUpdate = FALSE;
char szWeek[MAX_TIMELEN] = {0}; TableTail(m_logDate.wYear,m_logDate.wMonth,m_logDate.wDay,szWeek,sizeof(szWeek));
sprintf_s(m_szTableName,sizeof(m_szTableName),"leaguememberinfo_%s",szWeek); char szDate[MAX_TIMELEN] = {0};
sprintf_s(szDate,sizeof(szDate),"%d-%02d-%02d",m_logDate.wYear,m_logDate.wMonth,m_logDate.wDay);
sprintf_s(szCommand, sizeof(szCommand), "UPDATE %s SET ", m_szTableName);
if(type == 1)//T
{
/*更新TKills*/
if (m_tKills != 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s TKills = TKills + %d,",
szCommand,m_tKills);
bUpdate = TRUE;
} /*更新TDeaths*/
if (m_tDeath > 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s TDeaths = TDeaths + %d,",
szCommand,m_tDeath);
bUpdate = TRUE;
}
/*更新TRounds*/
if (m_tRound > 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s TRounds = TRounds + %d,",
szCommand,m_tRound);
bUpdate = TRUE;
}
}
else if(type == 2)//CT
{
/*更新CTKills*/
if (m_ctKills != 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s CTKills = CTKills + %d,",
szCommand,m_ctKills);
bUpdate = TRUE;
}
/*更新CTDeaths*/
if (m_ctDeaths > 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s CTDeaths = CTDeaths + %d,",
szCommand,m_ctDeaths);
bUpdate = TRUE;
}
/*更新CTRounds*/
if (m_ctRound > 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s CTRounds = CTRounds + %d,",
szCommand,m_ctRound);
bUpdate = TRUE;
}
}
/*更新Kills*/
if (m_kills != 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s Kills = Kills + %d,",
szCommand,m_kills);
bUpdate = TRUE;
}
/*更新Deaths*/
if (m_deaths > 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s Deaths = Deaths + %d,",
szCommand,m_deaths);
bUpdate = TRUE;
}
/*更新MissTimes*/
if (m_misplayer > 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s MissTimes = MissTimes + %d,",
szCommand,m_misplayer);
bUpdate = TRUE;
}
/*更新Mark*/
if (m_ != 0)
{
sprintf_s(szCommand, sizeof(szCommand), "%s Mark = Mark + %d,",
szCommand,m_);
bUpdate = TRUE;
}
/*更新LeagueID*/
if (m_leagueID > 0)//可能会发生转社团的情况
{
sprintf_s(szCommand, sizeof(szCommand), "%s LeagueID = %d,",
szCommand,m_leagueID);
bUpdate = TRUE;
}
int iComLen = strlen(szCommand);
szCommand[iComLen - 1] = 0;
sprintf_s(szCommand, sizeof(szCommand), "%s WHERE PlayerID = %d AND logDate = '%s'", szCommand, m_playerID, szDate); if(bUpdate)
{
if(TimeType == TABLETIME_DAY)
{
if (EXECUTE_ADO_OK == pDB->Execute(szCommand))
{
bOk = TRUE;
}else
{
memset(szCommand,0,sizeof(szCommand));
sprintf_s(szCommand, sizeof(szCommand), INSERT_PLAYERINFO,m_szTableName, m_playerID,m_leagueID,szDate,m_tKills,m_tDeath,m_tRound,m_ctKills,
m_ctDeaths,m_ctRound,m_kills,m_deaths,m_misplayer,m_);
if (EXECUTE_ADO_FALSE == pDB->Execute(szCommand))
{
WriteLog("CPlayerKill", "SaveProc failed");
bOk = FALSE;
}
else
{
bOk = TRUE;
}
}
}
}
return bOk;
}
{
ASSERT(m_pConnection != NULL);
ASSERT(strcmp(lpstrExec, _T("")) != 0);
_variant_t vRecords; m_nRecordsAffected = 0; try
{
m_pConnection->CursorLocation = adUseClient;
m_pConnection->Execute(_bstr_t(lpstrExec), &vRecords, adExecuteNoRecords);
m_nRecordsAffected = vRecords.iVal;
if(m_nRecordsAffected != 0)//执行成功
{
return 1;
}else//执行失败
{
return 2;
}
}
catch(_com_error& e)//异常
{
WriteLog("ado2_exception", lpstrExec);
_bstr_t description = e.Description();
WriteLog("ado2_exception",description);
return 3;
}
}
唯一键自增长就行了,为什么还要--“先做一次UpDate操作,当Update不成功的时候,我才做插入操作”?
能否用SQL语句来说明你的算法。主键 是 (ID,日期)先 update,
update .... where 的时候 主键是什么?如何得到的?update 不成功,则 insert .. values (.. ) 此时 主键是什么? 关键是你产生主键的机制是什么?
如果不是自增字段,可以用一张表存放ID,用户取数,锁表,执行完UPDATE、INSERT后更新ID值,
取消锁表
以接收到的网络数据,更新数据记录
当更新失败的时候,插入数据记录
我的数据库表 原来是空的,接收网络数据,对playerID的行为分天来记录
update .... where 的时候 主键是什么?如何得到的? update 不成功,则 insert .. values (.. ) 此时 主键是什么? 关键是你产生主键的机制是什么?update .... where 的时候 主键是什么? (update 同 insert的主键都是,网络中接收到的 playerID,同本地日期)主键是网络中接收到的 playerID,同本地日期, 我要做的就是对playerID的行为进行统计,更新数据记录
UPDATE leaguelog_2009_month_12 SET kills=100 where leagueid=120;失败然后我 INSERT INTO leaguelog_2009_month_12(leagueid,kills)VALUES(120,100);然后就 Duplicate entry '1-2009-12-01 00:00:00' for key 1
lock tables xxx
update ..
insert ..
unlock tables;
`LeagueID` int(11) default NULL,
`Kill` int(11) default '0',
PRIMARY KEY (`LeagueID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这是leaguelog_2009_month_12表
lock tables xxx
update
insert
unlock tables;OR
专门用一张表存放主键,取出时锁表,执行update 、insert ,再unlock
你自己到文档中查吧
INSERT .. ON DUPLICATE
REPLACEMySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
update
unlock
lock insert
unlock
还是lock
update
insert
unlock ?加的锁是什么类型? S 还是 X ?
replace into先查找更新,如果记录不存在就插入。