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