PHP скрипты

MySQL

Apache

phpMyADmin

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 предыдущей принятой строки.

Поделиться с друзьями