mysql INSERT INTO ..重复键时更新多个项目

bq3bfh9z  于 2022-12-26  发布在  Mysql
关注(0)|答案(3)|浏览(140)

我想做这样的事

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?),但这将是一个很大的查询,所以我真的想避免这种情况。

h79rfbju

h79rfbju1#

使用VALUES()函数

INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key2','value'), ('key1','key3','value2')
ON DUPLICATE KEY UPDATE
t.c = VALUES(t.c)

参见http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

5us2dqdw

5us2dqdw2#

rep太低,无法进行评论,但我想添加一个稍微复杂的语法,该语法受@ u响应的启发。要更新重复键上的多个字段:

INSERT INTO t (t.a, t.b, t.c, t.d)
VALUES ('key1','key2','value','valueb'), ('key1','key3','value2','value2b')
ON DUPLICATE KEY UPDATE
t.c = VALUES(t.c),
t.d = VALUES(t.d)
chhqkbe1

chhqkbe13#

在MySQL 8.0.19之后,您可以使用as关键字,例如:

INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new
  ON DUPLICATE KEY UPDATE c = new.a+new.b;

INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new(m,n,p)
  ON DUPLICATE KEY UPDATE c = m+n;

参考:https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

相关问题