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
. В основном используется с журналом обновлений.