SET [GLOBAL | SESSION] sql_variable=expression, [[GLOBAL | SESSION] sql_variable=expression...]
Команда SET устанавливает
различные опции, влияющие на
работу сервера или клиента.
Следующие примеры иллюстрируют различный синтаксис, который можно использовать для установки переменных.
В старых версиях MySQL мы допускали
использование SET OPTION, но
этот синтакс теперь считается
морально устаревшим.
В MySQL 4.0.3 мы также добавили режимы
GLOBAL и SESSION и
реализовали доступ к наиболее
важным переменным запуска.
LOCAL может использоваться
как синоним для SESSION.
Если вы устанавливаете несколько
переменных в одной команде, то
последний указанный режим GLOBAL
| SESSION будет использован.
SET sort_buffer_size=10000; SET @@local.sort_buffer_size=10000; SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;
Синтаксис @@variable_name
поддерживается с тем, чтобы
сделать MySQL более совместимым с
другими СУБД.
Различные системные переменные, которые вы можете установить, описаниы в этом руководстве. See Раздел 6.1.5, «Системные переменные».
Если вы используете режим
SESSION (по умолчанию), то
значения переменных, которые вы
устанавливаете, остаются в в
действии до тех пор, пока текущая
сессия не будет завершена, или до
тех пор, пока вы не установите
переменные в другое значение. Если
вы используете GLOBAL,
который требует привилегии
SUPER, это значение
запоминается и используется для
всех новых соединений до тех пор,
пока сервер не будет перезагружен.
Если вы хотите сделать какое-либо
значение перманентным, то вам
следует указать его в одном из
файлов конфигураций MySQL. See
Раздел 4.1.2, «Файлы параметров my.cnf».
Чтобы избежать неправильного
использования, MySQL будет сообщать
об ошибке, если вы будете выполнять
SET GLOBAL на переменной,
которую только можно изменять в
SET SESSION или если вы не
выбираете режим GLOBAL для
глобальной переменной.
Если вы хотите установить
сессионную (SESSION)
переменную в значение глобальной
(GLOBAL) или просто в
значение по умолчанию - вы можете
установить это значение в
DEFAULT.
SET max_join_size=DEFAULT;
Это аналогично:
SET @@session.max_join_size=@@global.max_join_size;
Если вам необходимо ограничить
максимальное значение, которое
может принимать стартовая
переменная с помощью SET,
вы можете указать это с помощью
использования опции командной
строки --maximum-variable-name. See
Раздел 4.1.1, «Параметры командной строки mysqld».
Список большинства переменных
можно получить с помощью SHOW
VARIABLES. See Раздел 4.5.6.4, «SHOW VARIABLES». Вы
можете получить конкретное
значение с помощью синтаксиса
@@[global.|local.]variable_name:
SHOW VARIABLES like "max_join_size"; SHOW GLOBAL VARIABLES like "max_join_size"; SELECT @@max_join_size, @@global.max_join_size;
Далее следует описание переменных,
использующих нестандартный
синтаксис SET и некоторых
других. Описание других переменных
можно найти в секции, описывающих
системные переменные, вместе с
описанием стартовых опций или в
описании команды SHOW
VARIABLES. See Раздел 6.1.5, «Системные переменные». See
Раздел 4.1.1, «Параметры командной строки mysqld». See
Раздел 4.5.6.4, «SHOW VARIABLES».
CHARACTER SET character_set_name |
DEFAULT
Преобразует все строки,
передающиеся от клиента, и
строки передающиеся клиенту, в
соответствии с заданным набором
символов. В настоящее время
единственной опцией для
character_set_name является
cp1251_koi8, но можно легко
добавить новые наборы символов,
отредактировав файл
sql/convert.cc в
дистрибутиве исходного кода MySQL.
Чтобы восстановить установку по
умолчанию, следует установить
значение character_set_name в
DEFAULT.
Следует учитывать, что синтаксис
установки опции CHARACTER
SET отличается от синтаксиса
установки других опций.
PASSWORD = PASSWORD('некий
пароль')
Устанавливает пароль для текущего пользователя. Любой не анонимный пользователь может изменить свой собственный пароль!
PASSWORD FOR user = PASSWORD('некий
пароль')
Устанавливает пароль для
особого пользователя для
текущего серверного хоста. Это
может сделать только
пользователь, имеющий доступ к
базе данных mysql. Данный
пользователь должен быть
представлен в формате
user@hostname, где
user и hostname в
точности соответствуют записям
этих позиций в столбцах
User и Host в
таблице mysql.user.
Например, если записи в полях
User и Host
соответственно были bob
и %.loc.gov, то необходимо
писать:
mysql> SET PASSWORD FOR bob@"%.loc.gov" = PASSWORD("newpass");
или
mysql>UPDATE mysql.user SET password=PASSWORD("newpass")->WHERE user="bob" AND host="%.loc.gov";
SQL_AUTO_IS_NULL = 0 | 1
Если установить в 1
(значение по умолчанию), то можно
найти последнюю внесенную
строку для таблицы со столбцом
AUTO_INCREMENT с помощью
следующей конструкции: WHERE
auto_increment_column IS NULL. Эта
возможность используется
некоторыми ODBC-программами,
такими как Access.
AUTOCOMMIT = 0 | 1
Если установить в 1, то
все изменения в таблицу будут
вноситься немедленно. Чтобы
открыть многокомандную
транзакцию, необходимо
использовать команду
BEGIN (see Раздел 6.7.1, «Синтаксис команд BEGIN/COMMIT/ROLLBACK»).
Если установить данную опцию в
0, то необходимо
использовать COMMIT /
ROLLBACK для того, чтобы
принять/отменить эту транзакцию
(see Раздел 6.7.1, «Синтаксис команд BEGIN/COMMIT/ROLLBACK»). Следует
учитывать, что при переходе из
режима работы без
AUTOCOMMIT в режим
AUTOCOMMIT MySQL
автоматически выполнит
COMMIT для любой открытой
транзакции.
BIG_TABLES = 0 | 1
Если установить в 1, то
предпочтительным местом
хранения всех временных таблиц
будет диск, а не оперативная
память. Это вызовет некоторое
замедление работы, зато для
больших операций SELECT,
требующих обширных временных
таблиц, не будет выдаваться
ошибка The table tbl_name is full.
Для нового соединения значение
этой величины по умолчанию равно
0 (т.е. использовать для временных
таблиц оперативную память). Эта
переменная раньше называлась
SQL_BIG_TABLES.
SQL_BIG_SELECTS = 0 | 1
При установке в 0 MySQL будет
прерывать выполнение запроса,
если поступившая команда
SELECT может потребовать
слишком много времени для
выполнения. Такая возможность
полезна при нерационально
написанном выражении
WHERE. Запрос
классифицируется как слишком
большой, если оператору
SELECT, видимо, пришлось
бы обрабатывать больше строк,
чем задано в max_join_size.
Для нового соединения значение
по умолчанию равно 1 (т.е.
разрешаются любые команды
SELECT).
SQL_BUFFER_RESULT = 0 | 1
SQL_BUFFER_RESULT будет
заносить результат выполнения
команд SELECT во
временную таблицу. Это поможет
MySQL раньше освободить блокировки
таблиц и окажется полезным в
случаях, когда требуется
значительное время для
пересылки результирующего
набора данных клиенту.
LOW_PRIORITY_UPDATES = 0 | 1
При установке в 1 все команды
INSERT, UPDATE,
DELETE и LOCK TABLE
WRITE будут ожидать, пока не
будет ни одной ожидающей решения
команды SELECT или
LOCK TABLE READ на
обрабатываемой таблице. Эта
переменная раньше называлась
SQL_LOW_PRIORITY_UPDATES.
MAX_JOIN_SIZE = значение |
DEFAULT
Запрещает команды SELECT,
которым, возможно, придется
обрабатывать более, чем
указанное значение комбинаций
строк. Установив эту величину,
можно определить команды
SELECT, в которых ключи
используются неправильно и
которые, возможно, потребуют
длительного времени для
исполнения. При установке этой
опции в величину, отличную от
DEFAULT, сбрасывается
флаг SQL_BIG_SELECTS. Если
вновь установить флаг
SQL_BIG_SELECTS, то
переменная SQL_MAX_JOIN_SIZE
будет игнорироваться. Значение
по умолчанию для этой переменной
можно установить, запустив
mysqld с -O
max_join_size=#. Эта переменная
раньше называлась
SQL_MAX_JOIN_SIZE.
Следует учитывать, что если результат запроса всегда находится в кэше запросов, то упомянутая выше проверка выполняться не будет. Вместо этого MySQL будет отсылать результат клиенту, поскольку результат запроса уже вычислен и отсылка его клиенту не создаст нагрузки для сервера.
QUERY_CACHE_TYPE = OFF | ON | DEMAND,
QUERY_CACHE_TYPE = 0 | 1 | 2
Определяет установку кэша запросов для данного потока.
| Опция | Описание |
| 0 or OFF | Не кэшировать или не извлекать результаты |
| 1 or ON | Кэшировать все результаты за
исключением запросов
SELECT SQL_NO_CACHE ...
|
| 2 or DEMAND | Кэшировать только запросы SELECT
SQL_CACHE ...
|
SQL_SAFE_UPDATES = 0 | 1
Если установить в 1, то MySQL будет
прерывать выполнение
поступивших команд
UPDATE или DELETE,
в которых не используется ключ
или LIMIT в выражении
WHERE. Это позволяет
обнаружить ошибочные обновления
при ручном создании команд SQL.
SQL_SELECT_LIMIT = value | DEFAULT
Максимальное количество
записей, возвращаемых командой
SELECT. Если
SELECT содержит
выражение LIMIT, то
LIMIT превосходит по
старшинству величину в
SQL_SELECT_LIMIT. Для нового
соединения значение по
умолчанию равно
"unlimited". Если предел был
изменен, то его можно вернуть в
значение по умолчанию указанием
величины DEFAULT в
выражении SQL_SELECT_LIMIT.
SQL_LOG_OFF = 0 | 1
При установке в 1 для данного
клиента в стандартный журнал не
будут заноситься никакие записи,
если клиент имеет привилегии
SUPER. Это не относится к
журналу обновлений!
SQL_LOG_UPDATE = 0 | 1
При установке в 0 для данного
клиента в журнал обновлений не
будут заноситься никакие записи,
если клиент имеет привилегии
SUPER. Это не относится к
стандартному журналу!
SQL_QUOTE_SHOW_CREATE = 0 | 1
При установке этой опции в 1
SHOW CREATE TABLE будет
заключать в кавычки имена таблиц
и столбцов. Имеет значение
Включено по
умолчанию, чтобы работала
репликация таблиц с изощренными
именами столбцов (see
Раздел 4.5.6.8, «SHOW CREATE TABLE»).
TIMESTAMP = timestamp_value | DEFAULT
Устанавливает время для данного
клиента. Применяется для
получения первоначальной
временной метки при
использовании журнала
обновлений для восстановления
строк. Переменная
timestamp_value должна
представлять системное время Unix,
а не временную метку MySQL.
LAST_INSERT_ID = #
Устанавливает величину,
возвращаемую функцией
LAST_INSERT_ID(). Хранится в
журнале обновлений при
использовании функции
LAST_INSERT_ID() в команде,
обновляющей таблицу.
INSERT_ID = #
Устанавливает величину, которую
следует использовать в
следующей команде INSERT
или ALTER TABLE при
внесении величины
AUTO_INCREMENT. В основном
используется с журналом
обновлений.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
