我当前正在使用此查询

insert into races(race_city_id, race_date, racers, division, elimination)
values (:race_city_id, :race_date, :racers, :division, :elimination)
on duplicate key update
    race_city_id = values(race_city_id),
    race_date = values(race_date),
    racers = values(racers),
    division = values(division),
    elimination = values(elimination);

在比赛日期、赛区和淘汰赛上有一个唯一的键。我当前正在使用on duplicate key,但是在找到重复的键时,我需要删除并在races(2个查询)中插入一个新行,或者以某种方式重新生成该行的id字段并更新其中的一些字段。我正在使用InnoDB,我已经读到当你更新一行时,主键将被重新生成,但我的主键不是。id设置为auto increment,所以我不确定是否有方法重新生成密钥。
查询正确地更新了行,但我只需要重新生成键。

最佳答案

将查询更改为:

replace into races(
  race_city_id,
  race_date,
  racers,
  division,
  elimination
) values (
  :race_city_id,
  :race_date,
  :racers,
  :division,
  :elimination
)

Asreplace into的工作方式与insert完全相同,只是如果表中的旧行与主键或唯一索引的新行具有相同的值,则会在插入新行之前删除旧行,从而生成新的id。

关于php - PHP PDO在重复键的情况下执行2个查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39339338/

10-14 15:16
查看更多