Básicamente, mysql está buscando eliminar un uso no estándar de larga data de la función de valores para despejar el camino para algún trabajo futuro donde el estándar SQL permite usar una palabra clave VALUES para algo muy diferente, y porque la función VALUES funciona en subconsultas o no. en una cláusula ON DUPLICATE KEY UPDATE puede ser sorprendente.
Debe agregar un alias a la cláusula VALUES y luego usar ese alias en lugar de la función VALUES no estándar en la cláusula ON DUPLICATE KEY UPDATE, p. cambiar
INSERT INTO foo (bar, baz) VALUES (1,2)
ON DUPLICATE KEY UPDATE baz=VALUES(baz)
a
INSERT INTO foo (bar, baz) VALUES (1,2) AS new_foo
ON DUPLICATE KEY UPDATE baz=new_foo.baz
(Esto solo funciona en mysql 8+, no en versiones anteriores ni en ninguna versión de mariadb hasta al menos 10.7.1)
Desde https://dev.mysql.com/worklog/task/?id=13325 :