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
The SET
statement assigns values to different types of variables that affect the
operation of the server or your client.
This section describes use of SET
for assigning
values to variables. The SET
statement can be used to assign values to these types of variables:
System variables. See Section 5.1.4, "Server System Variables". System variables also can be set at server startup, as described in Section 5.1.5, "Using System Variables".
User-defined variables. See Section 9.4, "User-Defined Variables".
Stored procedure and function parameters, and stored program local variables. See Section 13.6.4, "Variables in Stored Programs".
Some variants of SET
syntax are used in other contexts:
SET CHARACTER SET
and SET
NAMES
assign values to character set and collation variables associated with the connection to
the server. SET ONE_SHOT
is used for replication. These variants are
described later in this section.
SET
PASSWORD
assigns account passwords. See Section
13.7.1.7, "SET PASSWORD
Syntax".
SET TRANSACTION
ISOLATION LEVEL
sets the isolation level for transaction processing. See Section
13.3.6, "SET TRANSACTION
Syntax".
The following discussion shows the different SET
syntaxes that you can use to set variables. The examples use the =
assignment operator, but you can also use the :=
assignment operator for this purpose.
A user variable is written as @
and can be set as follows: var_name
SET @var_name
=expr
;
Many system variables are dynamic and can be changed while the server runs by using the SET
statement. For a list, see Section
5.1.5.2, "Dynamic System Variables". To change a system variable with SET
, refer to it as var_name
,
optionally preceded by a modifier:
To indicate explicitly that a variable is a global variable, precede its name by
GLOBAL
or @@global.
. The SUPER
privilege is required to set global variables.
To indicate explicitly that a variable is a session variable, precede its name by
SESSION
, @@session.
, or @@
.
Setting a session variable requires no special privilege, but a client can change only its own session
variables, not those of any other client.
LOCAL
and @@local.
are
synonyms for SESSION
and @@session.
.
If no modifier is present, SET
changes the session variable.
A SET
statement can contain multiple variable assignments, separated by commas. For
example, the statement can assign values to a user-defined variable and a system variable. If you set several
system variables, the most recent GLOBAL
or SESSION
modifier in the statement is used for following variables that have no modifier specified.
Examples:
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;
The @@
syntax for system
variables is supported for compatibility with some other database systems. var_name
If you change a session system variable, the value remains in effect until your session ends or until you change the variable to a different value. The change is not visible to other clients.
If you change a global system variable, the value is remembered and used for new connections until the server
restarts. (To make a global system variable setting permanent, you should set it in an option file.) The change
is visible to any client that accesses that global variable. However, the change affects the corresponding
session variable only for clients that connect after the change. The global variable change does not affect the
session variable for any client that is currently connected (not even that of the client that issues the SET
GLOBAL
statement).
To prevent incorrect usage, MySQL produces an error if you use SET GLOBAL
with a variable that can only be used with SET SESSION
or if you do not specify GLOBAL
(or
@@global.
) when setting a global variable.
To set a SESSION
variable to the GLOBAL
value or a
GLOBAL
value to the compiled-in MySQL default value, use the DEFAULT
keyword. For example, the following two statements are identical in setting the session value of max_join_size
to the global value:
SET max_join_size=DEFAULT;SET @@session.max_join_size=@@global.max_join_size;
Not all system variables can be set to DEFAULT
. In such cases, use of DEFAULT
results in an error.
It is not permitted to assign the value DEFAULT
to user-defined variables, stored
procedure or function parameters, or stored program local variables. This results in a syntax error for
user-defined variables, and also for parameters or local variables as of MySQL 5.6.6.
You can refer to the values of specific global or session system variables in expressions by using one of the
@@
-modifiers. For example, you can retrieve values in a SELECT
statement like this:
SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;
When you refer to a system variable in an expression as @@
(that is, when you do not specify var_name
@@global.
or @@session.
), MySQL returns the session value if it exists and the global value
otherwise. (This differs from SET @@
, which always refers to the session value.)var_name
=
value
Some variables displayed by SHOW VARIABLES
may not be available using
SELECT @@
syntax; an var_name
Unknown system variable
occurs. As a workaround in such cases, you can use
SHOW VARIABLES LIKE '
.var_name
'
Suffixes for specifying a value multiplier can be used when setting a variable at server startup, but not to set
the value with SET
at runtime. On the other hand, with SET
you can assign a variable's value using an expression, which is not true
when you set a variable at server startup. For example, the first of the following lines is legal at server
startup, but the second is not:
shell>mysql --max_allowed_packet=16M
shell>mysql --max_allowed_packet=16*1024*1024
Conversely, the second of the following lines is legal at runtime, but the first is not:
mysql>SET GLOBAL max_allowed_packet=16M;
mysql>SET GLOBAL max_allowed_packet=16*1024*1024;
To display system variables names and values, use the SHOW VARIABLES
statement. (See Section
13.7.5.40, "SHOW VARIABLES
Syntax".)
The following list describes SET
options that
have nonstandard syntax (that is, options that are not set with
syntax).name
= value
CHARACTER SET
{
charset_name
| DEFAULT}
This maps all strings from and to the client with the given mapping. You can add new mappings by
editing sql/convert.cc
in the MySQL source distribution. SET CHARACTER SET
sets three session system variables: character_set_client
and character_set_results
are set to the given character set, and character_set_connection
to the value of character_set_database
. See Section
10.1.4, "Connection Character Sets and Collations".
The default mapping can be restored by using the value DEFAULT
. The
default depends on the server configuration.
ucs2
, utf16
, and utf32
cannot be used as a client character set, which means that they do not work for SET CHARACTER SET
.
NAMES {'
charset_name
' [COLLATE 'collation_name
']
| DEFAULT}
SET NAMES
sets the three session system variables character_set_client
, character_set_connection
, and character_set_results
to the given character set. Setting character_set_connection
to charset_name
also sets collation_connection
to the default collation for charset_name
. The optional COLLATE
clause may be used to specify a collation explicitly. See Section
10.1.4, "Connection Character Sets and Collations".
The default mapping can be restored by using a value of DEFAULT
. The
default depends on the server configuration.
ucs2
, utf16
, and utf32
cannot be used as a client character set, which means that they do not work for SET NAMES
.
ONE_SHOT
is for internal use only, has been deprecated since MySQL 5.0,
and was removed in MySQL 5.6.1.