Pada dasarnya, mysql sedang mencari ke arah menghapus penggunaan non-standar lama dari fungsi nilai untuk membersihkan jalan untuk beberapa pekerjaan di masa depan di mana standar SQL memungkinkan menggunakan kata kunci VALUES untuk sesuatu yang sangat berbeda, dan karena bagaimana fungsi VALUES bekerja di subqueries atau tidak dalam klausa ON DUPLICATE KEY UPDATE bisa mengejutkan.
Anda perlu menambahkan alias ke klausa VALUES dan kemudian menggunakan alias itu alih-alih fungsi VALUES non-standar dalam klausa ON DUPLICATE KEY UPDATE, mis. ubah
INSERT INTO foo (bar, baz) VALUES (1,2)
ON DUPLICATE KEY UPDATE baz=VALUES(baz)
untuk
INSERT INTO foo (bar, baz) VALUES (1,2) AS new_foo
ON DUPLICATE KEY UPDATE baz=new_foo.baz
(Ini hanya berfungsi pada mysql 8+, bukan pada versi yang lebih lama atau versi mariadb apa pun hingga setidaknya 10.7.1)
Dari https://dev.mysql.com/worklog/task/?id=13325 :