mysql - 如何更新sql中的临时变量?
问题描述
我正在尝试编写一个垄断游戏,但出现以下语法错误:
SET @Token = 'Thimble';
SET @Roll = 7;
UPDATE Players
SET Players.Jail = FALSE, @Roll = @Roll - 6
WHERE Players.Jail = TRUE AND Players.Token = @Token AND @Roll > 5;
不能将临时变量的值设置为 UPDATE 的一部分吗?我需要@roll 和 Players.Jail 仅在满足 WHERE 条件时才更新,所以我看不到单独更新它们的方法。
解决方案
不,您不能SET @Roll
在 UPDATE 语句中。你只能SET
一栏。
像您尝试做的那样对临时变量使用技巧不是一个好习惯,因为变量的评估顺序没有很好地定义。
在这种情况下,您应该这样做:
UPDATE Players
SET Players.Jail = FALSE
WHERE Players.Jail = TRUE AND Players.Token = @Token
ORDER BY ...something...
LIMIT 1;
如果没有 ORDER BY,使用 LIMIT 没有多大意义,但我无法从您的示例中看出您要更新行的顺序。
推荐阅读
- c++ - QTreeWidget点击后删除慢
- java - 性能:Apache HttpAsyncClient 与多线程 URLConnection
- python - 张量流模型不更新权重
- php - 使用 android studio 克服 Web 身份验证
- c++ - -O2 函数作用域静态 TLS 上的 LLD 错误不能用于使用 -fPIC 重新编译符号
- swift - 快速手动输入数字而不是文本字段
- go - go-remote 不是下载模块而是下载 goget.html
- python - 使用主机名时,Python 本地 UDP 客户端不会接受来自本地服务器的消息
- javascript - 反应:在信使网络视图中捕获图像
- java - 在 Android Studio 中使用 Java 抓取网页的无限滚动“加载更多”按钮