【发布时间】:2021-08-05 03:02:09
【问题描述】:
在这些7 - 12 岁的问题中,投票最多的答案建议使用 MySQL VALUES 函数更新多行:
INSERT INTO chart (id, flag)
VALUES (1, 'FLAG_1'),(2, 'FLAG_2')
ON DUPLICATE KEY UPDATE id = VALUES(id), flag = VALUES(flag);
当我尝试使用 MySQL 8.0.20 版本时,收到了弃用警告
[HY000][1287] 'VALUES function' 已弃用,将在未来版本中删除。请使用别名(INSERT INTO ... VALUES (...) AS 别名)并将 ON DUPLICATE KEY UPDATE 子句中的 VALUES(col) 替换为 alias.col
MySQL worklog 建议改用别名。 'INSERT ... ON DUPLICATE KEY UPDATE Statement' docs中也提到过:
INSERT INTO chart (id, flag)
VALUES (1, 'FLAG_1'),(2, 'FLAG_2') AS aliased
ON DUPLICATE KEY UPDATE flag=aliased.flag;
但是尝试这种新语法时出现错误:
[42000][1064] 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 '' 附近使用正确的语法
使用 mysql 命令行工具,我可以使用新的别名语法更新表。为什么我不能在我常用的数据库工具 (Intellij Datagrip) 中执行此操作?
如何在 MySQL v8.0.20 及更高版本中更新多行而不出现弃用警告和错误?
【问题讨论】:
标签: mysql sql mysql-connector datagrip