如果出现重复密钥,PHP PDO将执行2个查询

时间:2016-09-06 01:13:44

标签: php mysql pdo

我目前正在使用此查询

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);

在race_date,division和elimination上使用唯一键。我目前正在使用on duplicate key,但是在找到重复的密钥时,我需要删除并在比赛中插入新行(2个查询)或以某种方式重新生成行的id字段并更新其中的一些字段。我正在使用InnoDB,我已经读过,当你更新一行时,主键会被重新生成,但我的不是。 id设置为自动递增,因此我不确定是否有办法重新生成密钥。

查询正确地更新了行,但我只需要重新生成密钥。

1 个答案:

答案 0 :(得分:1)

将查询更改为:

local-name()='Lol'

由于replace into races( race_city_id, race_date, racers, division, elimination ) values ( :race_city_id, :race_date, :racers, :division, :elimination ) 的工作原理与replace into完全相同,只是表中的旧行与主键的新行具有相同的值唯一索引,在插入新行之前删除旧行,生成新ID。