我已经阅读了很多关于在同一语句中读/写 MySQL 用户定义变量的不安全性。这个用例看起来很简单,但我想看看其他人的想法。
在这里,我有一个带有分数和重量的表格。我正在做一个排名,所以我按分数排序并计算权重的总和,直到我得到我想要的数字。因为我使用的是 Hibernate,所以我不能在 FROM 子句中进行子选择。
SELECT
score, weight, @val := score
FROM
tmp, (SELECT @runtot := 0) init
HAVING
(@runtot := @runtot + weight) <= (7)
ORDER BY score;
这似乎相当安全,因为 eval 和 comparison 是同一表达式的一部分。然后@val 将被设置为评估的最后一个分数,我可以做一个'SELECT @VAL'来获得最后一个值。
这是对用户定义变量的安全使用吗?