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

insert on duplicate update get "new" generated id

我想插入值,如果它存在,"insert .. on duplicate update" 会更新它,但不会更新新插入的自动增量值 one.I 听说重复更新时插入有一些错误,它总是生成新的 ID,如果存在,它将删除它,但我想准确地获取这个已删除的 ID。(当我使用 last_inserted_id 它只是 return 更新列的最后一个 ID,这不是新插入的)我想要用新插入的查询更新 id 应该像 :insert if exists delete exist one and insert new one (with auto increment)。我听说有 replace into 但它太慢了,我只想用新插入的 id 更新 id。

恕我直言,如果您尝试使用自动增量列执行奇特的更新逻辑,您就是在玩火。

如果你在更新它的时候需要一个新的自动增量id,那么就像Gordon说的那样删除旧行并插入新行。

在某些数据库工作负载下可能比使用 insert on duplicate key update 稍慢。但是,除非您的 table 包含至少 100 兆行,或者除非您整天整夜每秒至少执行 10 次这样的操作,否则性能差异将是微不足道的。如果您确实有这种数据库大小或工作负载,请咨询您的数据库管理员。

REPLACE = DELETE,然后 INSERT。 IODKU 从不删除。每个都需要您指定一些 UNIQUE 键的列,以便它知道要处理的行。一个微妙的地方:如果有多个UNIQUE键,REPLACE可能会删除多行,然后只插入一个。

IODKU 可以使用 ... UPDATE id = LAST_INSERT_ID(id), ....

获取 ID(现有的或新的)