МНОЖЕСТВО
Синтаксис
SET variable_assignment [, variable_assignment] ...
variable_assignment:
user_var_name = expr
| [GLOBAL | SESSION] system_var_name = expr
| [@@global. | @@session. | @@]system_var_name = expr
Также можно задать переменную пользователя в любом выражении с помощью этого синтаксиса:
user_var_name:= expr
Описание
Заявление SET присваивает значения различным типам переменных, которые влияют на работу сервера или вашего клиента. Более старые версии MySQL использовали SET OPTION, но этот синтаксис был устаревшим в пользу SET без OPTION, и был удалён в MariaDB 10.0.
Изменение системной переменной с помощью оператора SET не делает изменение постоянным. Для этого изменение должно быть внесено в файл конфигурации.
Для задания переменных на основе запроса см. ОПЕРАТОР SET.
См. SHOW VARIABLES для получения документации по просмотру системных переменных сервера.
См. Системные переменные сервера для списка всех системных переменных.
GLOBAL / SESSION
При настройке системной переменной область действия может быть указана как GLOBAL или SESSION.
Изменение глобальной переменной влияет на все новые сеансы. Оно не влияет на любые текущие открытые сеансы, включая тот, который произвёл изменение.
Изменение сеансовой переменной влияет только на текущий сеанс.
Если переменная имеет значение сеанса, то не указание ни GLOBAL, ни SESSION будет равносильно указанию SESSION. Если переменная имеет только глобальное значение, то не указание GLOBAL или SESSION будет применено к изменению глобального значения.
DEFAULT
Установка глобальной переменной в DEFAULT восстановит её до значения по умолчанию сервера, а установка сеансовой переменной в DEFAULT восстановит её до текущего глобального значения.
Примеры
- innodb_sync_spin_loops — это глобальная переменная.
- skip_parallel_replication — это сеансовая переменная.
- max_error_count — это и глобальная, и сеансовая.
SELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM
INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE
VARIABLE_NAME IN ('max_error_count', 'skip_parallel_replication', 'innodb_sync_spin_loops');
+---------------------------+---------------+--------------+
| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |
+---------------------------+---------------+--------------+
| MAX_ERROR_COUNT | 64 | 64 |
| SKIP_PARALLEL_REPLICATION | OFF | NULL |
| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |
+---------------------------+---------------+--------------+
Установка значений сеанса:
SET max_error_count=128;Query OK, 0 rows affected (0.000 sec)
SET skip_parallel_replication=ON;Query OK, 0 rows affected (0.000 sec)
SET innodb_sync_spin_loops=60;
ERROR 1229 (HY000): Variable 'innodb_sync_spin_loops' is a GLOBAL variable
and should be set with SET GLOBAL
SELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM
INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE
VARIABLE_NAME IN ('max_error_count', 'skip_parallel_replication', 'innodb_sync_spin_loops');
+---------------------------+---------------+--------------+
| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |
+---------------------------+---------------+--------------+
| MAX_ERROR_COUNT | 128 | 64 |
| SKIP_PARALLEL_REPLICATION | ON | NULL |
| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |
+---------------------------+---------------+--------------+
Установка глобальных значений:
SET GLOBAL max_error_count=256;
SET GLOBAL skip_parallel_replication=ON;
ERROR 1228 (HY000): Variable 'skip_parallel_replication' is a SESSION variable
and can't be used with SET GLOBAL
SET GLOBAL innodb_sync_spin_loops=120;
SELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM
INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE
VARIABLE_NAME IN ('max_error_count', 'skip_parallel_replication', 'innodb_sync_spin_loops');
+---------------------------+---------------+--------------+
| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |
+---------------------------+---------------+--------------+
| MAX_ERROR_COUNT | 128 | 256 |
| SKIP_PARALLEL_REPLICATION | ON | NULL |
| INNODB_SYNC_SPIN_LOOPS | NULL | 120 |
+---------------------------+---------------+--------------+
SHOW VARIABLES по умолчанию возвращает значение сеанса, если переменная не является только глобальной.
SHOW VARIABLES LIKE 'max_error_count'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_error_count | 128 | +-----------------+-------+ SHOW VARIABLES LIKE 'skip_parallel_replication'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | skip_parallel_replication | ON | +---------------------------+-------+ SHOW VARIABLES LIKE 'innodb_sync_spin_loops'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | innodb_sync_spin_loops | 120 | +------------------------+-------+
Использование синтаксиса inplace:
SELECT (@a:=1); +---------+ | (@a:=1) | +---------+ | 1 | +---------+ SELECT @a; +------+ | @a | +------+ | 1 | +------+
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/set/