MySQL documentation est tout à fait clair à ce sujet :
En règle générale, vous ne devez jamais affecter une valeur à une variable utilisateur et lire la valeur dans la même instruction. Vous pourriez obtenir les résultats que vous attendez, mais ce n'est pas garanti. L'ordre d'évaluation des expressions impliquant des variables utilisateur n'est pas défini et peut changer en fonction des éléments contenus dans une instruction donnée ; en outre, cet ordre n'est pas garanti d'être le même entre les versions du serveur MySQL. Dans SELECT @a, @a :[email protected] +1, ..., vous pourriez penser que MySQL évaluera d'abord @a, puis effectuera une affectation en second. Cependant, la modification de l'instruction (par exemple, en ajoutant une clause GROUP BY, HAVING ou ORDER BY) peut amener MySQL à sélectionner un plan d'exécution avec un ordre d'évaluation différent.
Vous pouvez faire ce que vous voulez en utilisant une sous-requête :
select @z, @z*2
from (SELECT @z:=sum(item)
FROM TableA
) t;