Пользовательские переменные
Пользовательские переменные — это переменные, которые могут быть созданы пользователем и существуют в сессии. Это означает, что никто не может получить доступ к пользовательским переменным, установленным другим пользователем, а при закрытии сессии эти переменные истекают. Однако эти переменные могут быть объединены с несколькими запросами и сохранёнными программами.
Имена пользовательских переменных должны предваряться одним символом at (@). Хотя использование зарезервированных слов в качестве имени пользовательской переменной безопасно, единственно допустимыми символами являются латинские буквы, цифры, знак доллара ($), знак подчёркивания (_) и точка (.). Если используются другие символы, имя может быть заключено в кавычки одним из следующих способов:
- @`var_name`
- @'var_name'
- @"var_name"
Эти символы могут быть экранированы как обычно.
Имена пользовательских переменных нечувствительны к регистру, хотя в MySQL 4.1 и более ранних версиях они были чувствительны к регистру.
Пользовательские переменные нельзя объявлять. К ним можно получить доступ даже если значение ещё не установлено; в этом случае они равны NULL. Для установки значения пользовательской переменной можно использовать:
- команду SET;
- оператор := в операторе SQL;
- SELECT ... INTO.
Поскольку тип пользовательской переменной нельзя объявить, единственный способ принудительно установить его — использовать CAST() или CONVERT():
SET @str = CAST(123 AS CHAR(5));
Если переменная ещё не использовалась, её значение равно NULL:
SELECT @x IS NULL; +------------+ | @x IS NULL | +------------+ | 1 | +------------+
Небезопасно читать пользовательскую переменную и устанавливать её значение в одном операторе (за исключением команды SET), поскольку порядок этих действий не определён.
Пользовательские переменные могут использоваться в большинстве операторов и подзапросов MariaDB, которые принимают выражение SQL. Однако существуют исключения, например, подзапрос LIMIT.
Они должны использоваться для создания подготовленного оператора:
@sql = 'DELETE FROM my_table WHERE c>1;'; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Другое частое применение — включение счётчика в запрос:
SET @var = 0; SELECT a, b, c, (@var:=@var+1) AS counter FROM my_table;
Схема информации
Пользовательские переменные можно просмотреть в таблице схемы информации USER_VARIABLES (как часть плагина User Variables) начиная с MariaDB 10.2.
Очистка пользовательских переменных
Пользовательские переменные сбрасываются, и таблица схемы информации очищается с помощью оператора FLUSH USER_VARIABLES.
SET @str = CAST(123 AS CHAR(5)); SELECT * FROM information_schema.USER_VARIABLES ORDER BY VARIABLE_NAME; +---------------+----------------+---------------+--------------------+ | VARIABLE_NAME | VARIABLE_VALUE | VARIABLE_TYPE | CHARACTER_SET_NAME | +---------------+----------------+---------------+--------------------+ | str | 123 | VARCHAR | utf8mb3 | +---------------+----------------+---------------+--------------------+ FLUSH USER_VARIABLES; SELECT * FROM information_schema.USER_VARIABLES ORDER BY VARIABLE_NAME; Empty set (0.000 sec)
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/user-defined-variables/