1

我想在查询中使用“插入重复键更新”来插入新行(如果不存在)或更新行(如果存在)。如果我没有唯一 ID,我似乎无法弄清楚如何使用它(因为尚未创建该行,并且该 ID 将在插入时自动递增)

insert into foodchoices (unique,notunique) values (Idonthavethis,'test')
on duplicate key update notunique = 'stuff';

现在,在上面的这个例子中,它说“Idonthavethis”,我没有这个字段的任何唯一值,因为它还没有作为一行插入。但是,我确实希望这会以某种方式插入,我只是不知道如何。我希望它会像这样:

insert into foodchoices (notunique) values ('test')

但是,如果它是一个已经存在的字段,我将拥有那个独特的价值。当我没有唯一值时,是否有某种形式的通配符或我可以使用的东西?

4

3 回答 3

3

我相信这个问题的答案在MySQL docs中得到了解决:

如果表包含一AUTO_INCREMENT列并且INSERT...UPDATE插入一行,则该LAST_INSERT_ID()函数返回该AUTO_INCREMENT值。如果语句改为更新一行,LAST_INSERT_ID()则没有意义。但是,您可以使用LAST_INSERT_ID(expr). 假设 id 是AUTO_INCREMENT列。要使LAST_INSERT_ID()更新有意义,请按如下方式插入行:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
于 2012-12-15T16:00:29.190 回答
0

我认为您可能会尝试做的是选择具有您拥有的值的行(如果存在则更新),否则插入。只是多了一句。

我只是不明白如何比较您没有的现有值(生成的 ID)。另外,如果 ID 是 DB 种子,它将如何被复制?

于 2012-05-02T04:17:12.570 回答
0

可能您需要更改表结构以向“非唯一”列添加任何约束。这样你就可以:

insert into foodchoices (notunique) values ('test') on duplicate key update columntostoreyouruniqueid = unique;

如果 notunique 没有约束,那么这意味着您将设置 uniqueid。所以它必须双重查询。

于 2012-05-02T04:32:05.057 回答