6.1.4 Переменные пользователя
6.1.4 Переменные пользователя
Для конкретного процесса пользователь может определить локальные
переменные, которые в MySQL обозначаются как @variablename. Имя локальной
переменной может состоять из буквенно-цифровых символов установленного в
данное время алфавита и символов `_', `$', and `.'. Тип кодировки по
умолчанию - ISO-8859-1 Latin1, он может быть изменен указанием иного типа
в аргументе параметра --default-character-set mysqld
(see section 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 в предыдущем выражении является
строкой.
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий
|