我想使用"插入重复密钥更新"在查询中插入新行(如果不存在)或更新行(如果不存在)。我似乎无法弄清楚如果我没有唯一的id(如果尚未创建行,并且在插入时将自动增加此ID),如何使用它
insert into foodchoices (unique,notunique) values (Idonthavethis,'test')
on duplicate key update notunique = 'stuff';
现在,在上面这个例子中,它表示" Idonthavethis",我没有该字段的任何唯一值,因为它尚未作为一行插入。但是,我确实希望以某种方式插入,我只是不知道如何。我希望它的行为如下:
insert into foodchoices (notunique) values ('test')
但是,如果它是一个已存在的字段,我将拥有该唯一值。当我没有独特的价值时,是否有某种形式的通配符或我可以使用的东西?
答案 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。所以它必须加倍查询。