6.1. Структура языка
6.1.4. Переменные пользователя
Для конкретного процесса пользователь может определить локальные переменные, которые в MySQL обозначаются как @variablename . Имя локальной переменной может состоять из буквенно-цифровых символов установленного в данное время алфавита и символов "_ ", "$ ", and ". ". Тип кодировки по умолчанию - ISO-8859-1 Latin1, он может быть изменен указанием иного типа в аргументе параметра --default-character-set mysqld (see Раздел 4.6.1, «Набор символов, применяющийся для записи данных и сортировки»).
Локальные переменные не требуют инициализации. Они содержат значение NULL по умолчанию; в них могут храниться целые числа, вещественные числа или строковые величины. При запуске конкретного процесса все объявленные в нем локальные переменные автоматически активизируются.
Локальную переменную можно объявить, используя синтаксис команды SET :
SET @variable= { integer expression | real expression | string expression }
[,@variable= ...].
Можно также определить значение переменной иным способом, без команды SET . Однако в этом случае в качестве оператора присвоения более предпочтительно использовать оператор ':= ', чем оператор "= ", так как последний зарезервирован для сравнения выражений, не связанных с установкой переменных:
mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1 | @t2 | @t3 |
+----------------------+------+------+------+
| 5 | 5 | 1 | 4 |
+----------------------+------+------+------+
Введенные пользователем переменные могут применяться только в составе выражений и там, где выражения допустимы. Заметим, что в область их применения в данное время не включается контекст, в котором явно требуется число, например, условие LIMIT в команде SELECT или выражение IGNORE number LINES в команде LOAD DATA .
Примечание: в команде SELECT каждое выражение оценивается только при отправлении клиенту. Это означает, что в условиях HAVING , GROUP BY , or ORDER BY не следует ссылаться на выражение, содержащее переменные, которые введены в части SELECT этой команды. Например, следующая команда НЕ будет выполняться так, как ожидалось:
mysql> SELECT (@aa:=id) AS a, (@aa+3) AS b FROM table_name HAVING b=5;
Причина в том, что переменная @aa не будет содержать значения текущей строки, в то время как значение id в предыдущем выражении является строкой.
Действует правило никогда не создавать и не использовать одну и ту же переменную в одном и том же выражении SQL.
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|