Ответ 1
MySQL документация совершенно понятна:
Как правило, вы никогда не должны присваивать значение пользовательской переменной и прочитайте значение в пределах одного и того же оператора. Вы можете получить ожидаемых результатов, но это не гарантируется. Получатель чего-то оценка выражений с использованием пользовательских переменных undefined и может изменяться на основе элементов, содержащихся в данном заявлении; кроме того, этот порядок не гарантируется одинаковым между выпусков MySQL Server. В SELECT @a, @a: = @a + 1,..., вы можете подумайте, что MySQL сначала оценит @a, а затем выполнит задание второй. Однако, изменяя утверждение (например, добавляя GROUP BY, HAVING или ORDER BY) может заставить MySQL выбрать план выполнения с другим порядком оценки.
Вы можете делать то, что хотите, с помощью подзапроса:
select @z, @z*2
from (SELECT @z:=sum(item)
FROM TableA
) t;