我当前正在使用此查询
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
)
As
replace into
的工作方式与insert
完全相同,只是如果表中的旧行与主键或唯一索引的新行具有相同的值,则会在插入新行之前删除旧行,从而生成新的id。关于php - PHP PDO在重复键的情况下执行2个查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39339338/