我想做这样的事
INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key2','value')
ON DUPLICATE KEY UPDATE
t.c = 'value';
INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key3','value2')
ON DUPLICATE KEY UPDATE
t.c = 'value2';
t. a和t.B是键。这一切工作正常,但我得到了一个错误的第二次插入。与phpMyAdmin这样的查询工作正常,但我猜它是独立运行的查询,因为它打印出的结果,从查询的注解?
像这样的东西也会很好,但我将需要有不同的价值观,为每一个项目。我喜欢这样,但我不知道我如何才能改变价值观的更新为每个价值观。
INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key2','value'), ('key1','key3','value2')
ON DUPLICATE KEY UPDATE
t.c = ???
问题在于问号,我应该在那里放什么,这样每次插入/更新都会有正确的值?显然,如果我在那里放了一个值,所有的字段都会得到那个值。
如果有另外一种方法可以在多个字段上使用两个键来执行“如果存在则更新,否则插入”的查询,我也有其他的想法。我想我可以单独运行每个查询(像phpMyAdmin?),但这将是一个很大的查询,所以我真的想避免这种情况。
3条答案
按热度按时间h79rfbju1#
使用VALUES()函数
参见http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
5us2dqdw2#
rep太低,无法进行评论,但我想添加一个稍微复杂的语法,该语法受@ u响应的启发。要更新重复键上的多个字段:
chhqkbe13#
在MySQL 8.0.19之后,您可以使用
as
关键字,例如:或
参考:https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html