我想插入值,如果它存在"插入..重复更新"将更新它,但它不会更新自动增量val与新插入的一个。我听说插入重复更新有一些错误,它总是生成新的ID,如果存在它将删除它,但我想得到这个删除的ID。(当我使用last_inserted_id它只返回更新列的最后一个id,它不是新插入的一个)我想用新插入的查询更新id应该像:插入如果存在删除存在一个并插入新的(带有自动增量)。我听说过有替换,但它是如此缓慢,我想只是更新ID与新插入的ID。
答案 0 :(得分:0)
如果您尝试使用自动增量列执行花哨的更新逻辑,那么您正在玩火。
如果您在更新时需要连续使用新的自动增量ID,那么只需删除旧行并插入新行,如Gordon所说。
在某些数据库工作负载下,可能比使用insert on duplicate key update
稍慢。但除非你的桌子包含至少100个megarows,或者除非你整天和晚上每秒至少进行10次这样的操作,否则性能差异将是微不足道的。如果您确实拥有这种数据库大小或工作负载,请向数据库管理员咨询建议。
REPLACE
= DELETE
,然后INSERT
。 IODKU永远不会删除。每个都要求您指定一些UNIQUE
键的列,以便它知道要使用的行。一个微妙的要点:如果有多个UNIQUE
个密钥,REPLACE
可能会删除多个行,则只插入一个。
IODKU可以使用... UPDATE id = LAST_INSERT_ID(id), ...
获取ID(现有的或新的)。