Spec-Zone .ru
спецификации, руководства, описания, API
|
SETvariable_assignment
[,variable_assignment
] ...variable_assignment
:user_var_name
=expr
| [GLOBAL | SESSION]system_var_name
=expr
| [@@global. | @@session. | @@]system_var_name
=expr
SET
оператор присваивает значения различным типам переменных, которые влияют на работу сервера или Вашего клиента.
Этот раздел описывает использование SET
для того,
чтобы присвоить значения переменным. SET
оператор
может использоваться, чтобы присвоить значения этим типам переменных:
Системные переменные. См. Раздел 5.1.4, "Системные Переменные Сервера". Системные переменные также могут быть установлены при запуске сервера, как описано в Разделе 5.1.5, "Используя Системные Переменные".
Определяемые пользователем переменные. См. Раздел 9.4, "Определяемые пользователем Переменные".
Хранимая процедура и параметры функции, и сохраненные локальные переменные программы. См. Раздел 13.6.4, "Переменные в Сохраненных Программах".
Некоторые разновидности SET
синтаксис используется в других контекстах:
SET CHARACTER SET
и SET
NAMES
присвойте значения набору символов и переменным сопоставления, связанным с соединением с
сервером. SET ONE_SHOT
используется для репликации. Эти разновидности
описываются позже в этом разделе.
SET
PASSWORD
присваивает пароли учетной записи. См. Раздел
13.7.1.7,"SET PASSWORD
Синтаксис".
SET TRANSACTION
ISOLATION LEVEL
устанавливает уровень изоляции для обработки транзакций. См. Раздел
13.3.6,"SET TRANSACTION
Синтаксис".
Следующее обсуждение показывает различное SET
синтаксисы, которые можно использовать, чтобы установить переменные. Примеры используют =
оператор присваивания, но можно также использовать :=
оператор присваивания с этой целью.
Пользовательская переменная пишется как @
и может быть установлен следующим образом: var_name
SET @var_name
=expr
;
Много системных переменных являются динамичными и могут быть заменены, в то время как сервер работает при
использовании SET
оператор. Для списка см. Раздел
5.1.5.2, "Динамические Системные Переменные". Заменить системную переменную с SET
, обратитесь к этому как var_name
, дополнительно предшествовавший модификатором:
Чтобы указать явно, что переменная является глобальной переменной, предшествуйте ее
имени GLOBAL
или @@global.
. SUPER
полномочие обязано устанавливать глобальные переменные.
Чтобы указать явно, что переменная является переменной сеанса, предшествуйте ее
имени SESSION
, @@session.
, или @@
. Установка переменной сеанса не требует никакого специального
полномочия, но клиент может заменить только его собственные переменные сеанса, не таковые из любого
другого клиента.
LOCAL
и @@local.
синонимы
для SESSION
и @@session.
.
Если никакой модификатор не присутствует, SET
заменяет переменную сеанса.
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=16M
shell>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
CHARACTER SET
{
charset_name
| DEFAULT}
Это отображает все строки от и до клиента с данным отображением. Можно добавить новые отображения,
редактируя sql/convert.cc
в исходном распределении MySQL. SET CHARACTER SET
наборы три системных переменные сеанса: character_set_client
и character_set_results
устанавливаются в данный набор символов, и
character_set_connection
к значению character_set_database
. См. Раздел
10.1.4, "Наборы символов соединения и Сопоставления".
Отображение значения по умолчанию может быть восстановлено при использовании значения DEFAULT
. Значение по умолчанию зависит от конфигурации сервера.
ucs2
, utf16
, и utf32
не может использоваться в качестве клиентского набора символов, что
означает, что они не работают на SET CHARACTER SET
.
NAMES {'
charset_name
' [COLLATE 'collation_name
']
| DEFAULT}
SET NAMES
устанавливает три системных переменные сеанса character_set_client
, character_set_connection
, и character_set_results
к данному набору символов. Установка character_set_connection
к charset_name
также наборы collation_connection
к сопоставлению значения по умолчанию для
charset_name
. Дополнительное COLLATE
пункт
может использоваться, чтобы определить сопоставление явно. См. Раздел
10.1.4, "Наборы символов соединения и Сопоставления".
Отображение значения по умолчанию может быть восстановлено при использовании значения DEFAULT
. Значение по умолчанию зависит от конфигурации сервера.
ucs2
, utf16
, и utf32
не может использоваться в качестве клиентского набора символов, что
означает, что они не работают на SET NAMES
.
ONE_SHOT
для внутреннего пользования только, был осужден начиная с MySQL
5.0, и был удален в MySQL 5.6.1.