Spec-Zone.ru › MariaDB

Пользовательские переменные

Пользовательские переменные — это переменные, которые могут быть созданы пользователем и существуют в сессии. Это означает, что никто не может получить доступ к пользовательским переменным, установленным другим пользователем, а при закрытии сессии эти переменные истекают. Однако эти переменные могут быть объединены с несколькими запросами и сохранёнными программами.

Имена пользовательских переменных должны предваряться одним символом 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)

См. также

  • DECLARE VARIABLE
  • Таблица Performance Schema user_variables_by_thread
  • Таблица схемы информации USER_VARIABLES
Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API