【问题标题】:MySQL v8.0.13 Warning 1287 Setting user variables within expressions is deprecated and will be removed in a future releaseMySQL v8.0.13 警告 1287 在表达式中设置用户变量已弃用,将在未来版本中删除
【发布时间】:2019-04-27 17:11:17
【问题描述】:

在 MySQL v8.0.13 中执行以下查询会导致此错误:

0 行受影响,1 个警告:1287 在表达式中设置用户变量已弃用,将在未来版本中删除。请改为在单独的语句中设置变量。

SET @i = -1;

UPDATE `tb_test`
SET `order` = (@i := @i + 1)
ORDER BY `order` ASC;

关于如何在单独的语句中设置变量有什么建议吗?

【问题讨论】:

  • 我在这里也一头雾水,同样的用例,需要在更新中增加一个变量。如果您找到解决方案,请告诉我。
  • 我还没有找到针对这个问题的特定于 MySQL 的解决方案。我最终在我的应用程序代码而不是数据库中进行计算。我更喜欢 MySQL 解决方案,但我的结果不会太长,因此它是应用程序中的最小负载。
  • 我会继续挖掘,如果有什么发现会告诉你的。

标签: mysql sql


【解决方案1】:

这确实是在黑暗中拍摄(从未使用过 mySQL),但检查 the docs 会说:

“在 MySQL 8.0.13 中不支持在 SET 以外的语句中设置用户变量。”

(强调我的)。

所以问题可能是您在不使用 SET 的情况下增加了 @i?你能用一个显式的 SET 重写它,看看它是否有帮助?

【讨论】:

  • 谢谢@p.marino。我尝试了在 UPDATE 语句之外设置 @i 的不同方法,但是我似乎找不到有效的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 2018-11-29
  • 1970-01-01
相关资源
最近更新 更多