在这些具有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 'VALUES函数‘被废弃,并将在以后的发行版中删除。请使用别名(插入.价值(.)(作为别名)和用alias.col替换ON重复键更新子句中的值(Col)
MySQL工作日志建议使用别名代替。在‘'INSERT .关于重复键更新语句’文档中也提到了
INSERT INTO chart (id, flag)
VALUES (1, 'FLAG_1'),(2, 'FLAG_2') AS aliased
ON DUPLICATE KEY UPDATE flag=aliased.flag;然而,尝试这种新语法时,我得到了一个错误:
42000您的SQL语法出现了错误;请检查与您的MySQL服务器版本对应的手册,以获得在第3行使用的正确语法。
使用mysql命令行工具,我可以用新的别名语法很好地更新表。为什么我不能在我常用的数据库工具()中这样做呢?
如何更新MySQL v8.0.20及更高版本中的多行,而无需警告和错误?
发布于 2021-08-05 03:02:09
问题中的新别名语法是正确的:
INSERT INTO chart (id, flag)
VALUES (1, 'FLAG_1'),(2, 'FLAG_2') AS aliased
ON DUPLICATE KEY UPDATE flag=aliased.flag;还请确保:
使用我的数据库工具的MySQL连接器驱动程序是导致错误的罪魁祸首。它被设置成一个旧版本。
您可以这样更新您的MySQL连接驱动程序:
右键单击数据库视图>数据源属性>底部的数据库连接,应该建议将驱动程序切换到8.0.20版本:

https://stackoverflow.com/questions/68660109
复制相似问题