Spec-Zone .ru
спецификации, руководства, описания, API

13.7.4. SET Синтаксис

SET variable_assignment [, variable_assignment] ...variable_assignment:      user_var_name = expr    | [GLOBAL | SESSION] system_var_name = expr    | [@@global. | @@session. | @@]system_var_name = expr

SET оператор присваивает значения различным типам переменных, которые влияют на работу сервера или Вашего клиента.

Этот раздел описывает использование SET для того, чтобы присвоить значения переменным. SET оператор может использоваться, чтобы присвоить значения этим типам переменных:

Некоторые разновидности SET синтаксис используется в других контекстах:

Следующее обсуждение показывает различное SET синтаксисы, которые можно использовать, чтобы установить переменные. Примеры используют = оператор присваивания, но можно также использовать := оператор присваивания с этой целью.

Пользовательская переменная пишется как @var_name и может быть установлен следующим образом:

SET @var_name = expr;

Много системных переменных являются динамичными и могут быть заменены, в то время как сервер работает при использовании SET оператор. Для списка см. Раздел 5.1.5.2, "Динамические Системные Переменные". Заменить системную переменную с SET, обратитесь к этому как var_name, дополнительно предшествовавший модификатором:

A SET оператор может содержать многократные переменные присвоения, разделенные запятыми. Например, оператор может присвоить значения определяемой пользователем переменной и системной переменной. Если Вы устанавливаете несколько системных переменных, новое 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;

@@var_name синтаксис для системных переменных поддерживается для совместимости с некоторыми другими системами баз данных.

Если Вы заменяете системную переменную сеанса, значение остается в силе до Ваших концов сеанса или пока Вы заменяете переменную к различному значению. Изменение не видимо другим клиентам.

Если Вы заменяете глобальную системную переменную, значение помнят и используется для новых соединений до перезапусков сервера. (Чтобы сделать глобальную системную переменную установкой постоянного, следует установить это в файле опции.) Изменение видимо любому клиенту, это получает доступ к той глобальной переменной. Однако, изменение влияет на соответствующую переменную сеанса только для клиентов, которые соединяются после изменения. Изменение глобальной переменной не влияет на переменную сеанса для любого клиента, который в настоящий момент соединяется (не даже тот из клиента, который выходит SET GLOBAL оператор).

Чтобы предотвратить неправильное использование, MySQL производит ошибку, если Вы используете SET GLOBAL с переменной, которая может только использоваться с SET SESSION или если Вы не определяете GLOBAL (или @@global.) устанавливая глобальную переменную.

Установить a SESSION переменная к GLOBAL значение или a GLOBAL оцените скомпилированному - в значении по умолчанию MySQL, используйте DEFAULT ключевое слово. Например, следующие два оператора идентичны в установке значения сеанса max_join_size к глобальному значению:

SET max_join_size=DEFAULT;SET @@session.max_join_size=@@global.max_join_size;

Не все системные переменные могут быть установлены в DEFAULT. В таких случаях, использовании DEFAULT результаты по ошибке.

Не разрешается присвоить значение DEFAULT к определяемым пользователем переменным, хранимой процедуре или параметрам функции, или сохраненным локальным переменным программы. Это приводит к синтаксической ошибке для определяемых пользователем переменных, и также для параметров или локальных переменных с MySQL 5.6.6.

Можно обратиться к значениям определенной глобальной переменной или системных переменных сеанса в выражениях при использовании одного из @@- модификаторы. Например, можно получить значения в a SELECT оператор как это:

SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;

Когда Вы обращаетесь к системной переменной в выражении как @@var_name (то есть, когда Вы не определяете @@global. или @@session.), MySQL возвращает значение сеанса, если это существует и глобальное значение иначе. (Это отличается от SET @@var_name = value, который всегда обращается к значению сеанса.)

Отметить

Некоторые переменные, выведенные на экран SHOW VARIABLES возможно, не доступное использование SELECT @@var_name синтаксис; Unknown system variable происходит. Как обходное решение в таких случаях, можно использовать SHOW VARIABLES LIKE 'var_name'.

Суффиксы для того, чтобы определить множитель значения могут использоваться, устанавливая переменную при запуске сервера, но не установить значение с SET во времени выполнения. С другой стороны, с SET можно присвоить значение переменной, используя выражение, которое не является истиной, когда Вы устанавливаете переменную при запуске сервера. Например, первая из следующих строк является законной при запуске сервера, но второй, не:

shell> mysql --max_allowed_packet=16Mshell> mysql --max_allowed_packet=16*1024*1024

Наоборот, вторая из следующих строк является законной во времени выполнения, но первой, не:

mysql> SET GLOBAL
        max_allowed_packet=16M;mysql> SET GLOBAL
        max_allowed_packet=16*1024*1024;

К именам переменных системы отображения и значениям, используйте SHOW VARIABLES оператор. (См. Раздел 13.7.5.40,"SHOW VARIABLES Синтаксис".)

Следующий список описывает SET опции, у которых есть нестандартный синтаксис (то есть, опции, которые не устанавливаются с name = value синтаксис).