如何修复MYSQL中INSERT,ON DUPLICATE KEY UPDATE中的VALUES()过时通知

mspsb9vt  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(195)

在mysql 8.0中,当VALUES()用于类似下面的查询时,会给出一个不赞成使用的通知

INSERT INTO foo (bar, baz) VALUES (1,2)
ON DUPLICATE KEY UPDATE baz=VALUES(baz)

这篇文章展示了如果您更新的是单行,而不是多行的解决方案,如何修复它,这就是我们使用VALUES()的原因。

INSERT INTO foo (bar, baz) VALUES (1,2)
ON DUPLICATE KEY UPDATE baz=VALUES(baz)

INSERT INTO foo (bar, baz) VALUES (1,2) AS new_foo
ON DUPLICATE KEY UPDATE baz=new_foo.baz

这对于单次插入查询是可以的,但我不知道如何将其扩展为多次插入

INSERT INTO foo (bar, baz) 
VALUES (1,2) AS new_foo1,
VALUES (3,4) AS new_foo2,
VALUES (5,6) AS new_foo3
ON DUPLICATE KEY UPDATE baz=new_foo.baz  #what to do here??

当插入multiplerows时,这看起来太多了,而不是替换VALUES()的易用性。有人能告诉我在这种查询中修复VALUES()的反对意见的正确方法吗?

gupuwyp2

gupuwyp21#

这在手册里有,你写values * 一次 *,然后是所有的元组,然后是as,后面是别名。
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

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

这将创建一个别名来连续引用每一行。类似于JOIN语法中的相关名。

相关问题