You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多行INSERT ON DUPLICATE KEY UPDATE中VALUES()弃用的修复方案

MySQL 8.0 多行插入时解决 VALUES() 弃用警告的正确方法

在MySQL 8.0中,VALUES()函数在INSERT...ON DUPLICATE KEY UPDATE场景下已被标记为弃用,单行插入可通过给VALUES子句起别名解决,但多行场景无需给每行单独命名,正确写法是给整个VALUES集合统一设置别名:

INSERT INTO foo (bar, baz) 
VALUES (1,2), (3,4), (5,6)
AS new_foo
ON DUPLICATE KEY UPDATE baz = new_foo.baz;

这个写法的核心是:给所有插入行的整体数据源起一个别名(比如new_foo),当触发唯一键冲突时,MySQL会自动关联当前冲突行对应的数据源列值,完全替代原VALUES(baz)的作用,同时不会触发弃用警告。

如果需要更灵活的数据源构造(比如包含计算逻辑、动态生成数据),也可以用INSERT...SELECT结合UNION ALL的方式,给结果集起别名即可:

INSERT INTO foo (bar, baz)
SELECT bar, baz FROM (
    SELECT 1 AS bar, 2 AS baz
    UNION ALL
    SELECT 3, 4
    UNION ALL
    SELECT 5, 6
) AS new_foo
ON DUPLICATE KEY UPDATE baz = new_foo.baz;

这两种方式都能保持多行插入的便捷性,同时彻底解决VALUES()函数的弃用问题。

内容的提问来源于stack exchange,提问作者Hasley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:10:53