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