3.7: Пользовательские переменные в MySQL
Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Пользовательские переменные в MySQL
MySQL поддерживает переменные с именами вида @имя_переменной. Имя переменной может состоять из алфавитно-цифровых символов текущего набора, а также из _, $ и ..
Переменные не должны быть инициализированы. Они содержат NULL по умолчанию и могут сохранять целое число, реальное или строковое значение. Все переменные для текущего сеанса связи будут освобождены, когда сеанс связи с сервером будет завершен. Все переменные относятся только к текущему сеансу связи. В других сеансах могут использоваться переменные с теми же самыми именами, но они будут уже сами по себе.
Вы можете устанавливать переменную через вызов SET:
SET ©переменная = значение, @другая_переменная = другое_значение, и т.д.
А также устанавливать переменную в выражении @variable:=expr, напри¬мер так:
select @tl:=(@t2:=1)+@t3:=4,@tl,@t2,@t3;
+----------------------------------------+
| @tl:=(@t2:=1)+@t3:=4 | @tl | @t2 | @t3 |
+----------------------------------------+
| 5 | 5 | 1 | 4 |
+----------------------------------------+
Здесь надо использовать синтаксис : = потому, что символ = уже зарезервирован для сравнений.
Переменные пользователя могут применяться там, где допускаются выражения. Обратите внимание, что в настоящее время они не используются в контекстах, где явно требуется число, например в предложении LIMIT вызова SELECT.
В инструкции SELECT каждое выражение вычислено только тогда, когда оно послано пользователю. Это означает, что в GROUP BY или ORDER BY вы не можете обратиться к выражению, которое включает переменные, установленные в SELECT. Например, следующая инструкция НЕ будет работать, как вы ожидаете:
SELECT (@aa:=id) AS а, (@аа+3) AS b FROM table_name HAVING b=5;
Причина: @aa будет содержать не значение текущей строки, а значение id предыдущей принятой строки.