插入重复更新get" new"生成的id

时间:2016-08-05 10:33:54

标签: mysql sql insert database-performance insert-update

我想插入值,如果它存在"插入..重复更新"将更新它,但它不会更新自动增量val与新插入的一个。我听说插入重复更新有一些错误,它总是生成新的ID,如果存在它将删除它,但我想得到这个删除的ID。(当我使用last_inserted_id它只返回更新列的最后一个id,它不是新插入的一个)我想用新插入的查询更新id应该像:插入如果存在删除存在一个并插入新的(带有自动增量)。我听说过有替换,但它是如此缓慢,我想只是更新ID与新插入的ID。

1 个答案:

答案 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(现有的或新的)。