插入重复键更新

时间:2012-05-02 04:11:12

标签: mysql insert

我想使用"插入重复密钥更新"在查询中插入新行(如果不存在)或更新行(如果不存在)。我似乎无法弄清楚如果我没有唯一的id(如果尚未创建行,并且在插入时将自动增加此ID),如何使用它

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

现在,在上面这个例子中,它表示" Idonthavethis",我没有该字段的任何唯一值,因为它尚未作为一行插入。但是,我确实希望以某种方式插入,我只是不知道如何。我希望它的行为如下:

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

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

我只是看不出你如何比较你没有的现有值(生成的ID)。另外,如果ID是DB种子,它将如何重复?

答案 2 :(得分:0)

您可能需要更改表结构以向“notunique”列添加任何约束。所以你可以:

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

如果notunique没有constaint那么它意味着你将具有uniqueid作为set。所以它必须加倍查询。