September 29 2013

mysql set option

mysql> help set
Name: ‘SET’
Description:
Syntax:
SET variable_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. Older versions of
MySQL employed SET OPTION, but this syntax is deprecated in favor of
SET without OPTION.

URL: http://dev.mysql.com/doc/refman/5.5/en/set-statement.html

set语句将值赋给不同类型的变量影响的操作服务器或客户端。老版本的MySQL set  option  选项,但不建议

使用这个语法的设置
用于分配账户密码的SET PASSWORD语句

mysql> help set password
Name: ‘SET PASSWORD’
Description:
Syntax:
SET PASSWORD [FOR user] =
{
PASSWORD(‘cleartext password’)
| OLD_PASSWORD(‘cleartext password’)
| ‘encrypted password’
}

The SET PASSWORD statement assigns a password to a MySQL user account:

o With no FOR user clause, this statement sets the password for the
current user:

SET PASSWORD = PASSWORD(‘cleartext password’);

多数系统变量可以在运行时间被更改 它们被叫做动态系统变量

set可以用来设置用户变量:

可以用于设置变量的不同语法。
用户变量可以被写作@var_name,并可以进行如下设置:
SET @var_name = expr;

系统变量可以被作为var_name引用到SET语句中。在名称的前面可以自选地添加GLOBAL或@@global,以明确地

指示该变量是全局变量。或者在名称前面添加SESSION, @@session,或@@,以指示它是一个会话变量。

LOCAL和@@local是SESSION和@@session地同义词。如果没有修改符,则SET设置会话变量
支持系统变量的@@var_name语法,以便使MySQL语法与其它数据库系统相兼容
如果您在同一个语句中设置多个系统变量,则最后一个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;

如果您使用SESSION(默认情况)设置一个系统变量,则该值仍然有效,直到当前会话结束为止,或者直到您

吧变量设置为一个不同的值为止。如果您使用GLOBAL(要求SUPER权限)来设置一个系统变量,则该值被记住

,并被用于新的连接,直到服务器重新启动为止。如果您想要进行永久式变量设置,您应该把它放入一个选

项文件。

为了防止不正确的使用,如果您使用SET GLOBAL时同时使用了一个只能与SET SESSION同时使用的变量,或者

如果您在设置一个全局变量时未指定GLOBAL(或@@),则MySQL会产生一个错误
如果您想要把一个SESSION变量设置为GLOBAL值或把一个GLOBAL值设置为内部MySQL默认值,需使用DEFAULT关

键词。例如,在把max_join_size会话值设置为全局值时,以下两个语句是一样的:
SET max_join_size=DEFAULT;
SET @@session.max_join_size=@@global.max_join_size;
您可以使用SHOW VARIABLES来得到系统变量清单要获得与样式匹配的一个具体的变量名称或者名称清单,需

使用LIKE子句,使用方法如下:
SHOW VARIABLES LIKE ‘max_join_size’;
SHOW GLOBAL VARIABLES LIKE ‘max_join_size’;
要得到名称与样式匹配的变量的清单,需使用通配符‘%’:
SHOW VARIABLES LIKE ‘have%’;
SHOW GLOBAL VARIABLES LIKE ‘have%’;
通配符可以被用于相匹配的样式中的任何位置。
您也可以通过使用@@[global.|local.]var_name语法和SELECT来得到值:
SELECT @@max_join_size, @@global.max_join_size;

当您使用SELECT @@var_name(即您不指定全局、会话或本地)来恢复一个变量时,则MySQL会返回SESSION值

(如果存在)或者GLOBAL值。
mysql> SELECT @@AUTOCOMMIT;
+————–+
| @@AUTOCOMMIT |
+————–+
|            1 |
+————–+

AUTOCOMMIT = {0 | 1}

设置autocommit模式。如果设置为1,则所有对表的更改会立刻生效。如果设置为0,则您必须使用COMMIT来

接受一个事务,或使用ROLLBACK来取消它。如果您把AUTOCOMMIT模式从0改为1,则MySQL会对开放事务执行一

个自动COMMIT。开始一个事务的另一种方法是使用一个START TRANSACTION或BEGIN语句

BIG_TABLES = {0 | 1}

如果设置为1,所有的临时表被存储在磁盘中,而不是存储在储存期中。这样会稍微慢些,但是对于需要一个

大型临时表的SELECT操作,不会发生The table tbl_name is full错误。对于一个新连接,默认值为0(使用

存储器内部临时表)。通常,您不必设置此变量,因为根据需要,存储器内部表会被自动转换为以磁盘为基

础的表。( 注释:本变量以前被命名为SQL_BIG_TABLES。)

CHARACTER SET {charset_name | DEFAULT}

本语句使用给定的映射为所有来自客户端和指向客户端的字符串建立映射。您可以通过在MySQL源分布中编辑

sql/convert.cc来添加新的映射。SET CHARACTER SET用于设定三个会话系统变量:character_set_client和

character_set_results被设置为给定的字符集,character_set_connection被设置为

character_set_database值。
可以通过使用DEFAULT值恢复默认的映射
SET CHARACTER SET的语法与设置其它选项的语法不同
FOREIGN_KEY_CHECKS = {0 | 1}

如果设置为1(默认情况),则检查InnoDB表的外键限制条件。如果设置为0,则限制条件被忽略。如果重新

载入InnoDB表时按照的顺序与上级/下级目录所要求的顺序不同,此时禁用外键检查是有用的。

IDENTITY = value

该变量是LAST_INSERT_ID变量的同义词。该变量的作用是保持与其它数据库兼容。您可以使用SELECT

@@IDENTITY读取其值,并可以使用SET IDENTITY设置它。

·         INSERT_ID = value

用于设置将被以下INSERT或ALTER TABLE语句使用的值。此值在插入一个AUTO_INCREMENT值时使用。本语句主

要和二进制日志同时使用。

·         LAST_INSERT_ID = value

用于设定将从LAST_INSERT_ID()被返回的值。当您在用于更新表的语句中使用LAST_INSERT_ID()时,它被存

储在二进制日志中。设置此变量不会更新由mysql_insert_id() C API函数返回的值。

·         NAMES {‘charset_name’ | DEFAULT}

SET NAMES用于把三个会话系统变量character_set_client, character_set_connection和

character_set_results设置为给定的字符集。把character_set_connection设置为charset_name时,同时把

collation_connection设置为charset_name的默认整序。

使用一个DEFAULT值可以恢复默认的映射。

·         ONE_SHOT

这不是一个服务器系统变量,但是它可以被用来影响用于设置字符集、整序和时区的变量的效果。ONE_SHOT

主要被用于复制:mysqlbinlog使用SET ONE_SHOT来暂时地修改字符集、整序和时区变量的值,以反映出它们

原先的值。

您不能在使用ONE_SHOT时使用除允许的变量以外的变量;如果您这么做,您会得到如下错误:
mysql> SET ONE_SHOT max_allowed_packet = 1;
ERROR 1382 (HY000): The ‘SET ONE_SHOT’ syntax is reserved for purposes internal to the MySQL

server

如果同时使用ONE_SHOT和被允许的变量,则会根据要求更改变量,但是会在下一个语句后,重新设置所有的

字符集、整序和与时区有关的服务器系统变量。唯一的例外是,当下一个语句是SET语句时,不会进行重新设

置。换句话说,在下一个非SET语句之后,才会进行重新设置。例如:
mysql> SET ONE_SHOT character_set_connection = latin5;

mysql> SET ONE_SHOT collation_connection = latin5_turkish_ci;

mysql> SHOW VARIABLES LIKE ‘%_connection’;
+————————–+——————-+
| Variable_name            | Value             |
+————————–+——————-+
| character_set_connection | latin5            |
| collation_connection     | latin5_turkish_ci |
+————————–+——————-+

mysql> SHOW VARIABLES LIKE ‘%_connection’;
+————————–+——————-+
| Variable_name            | Value             |
+————————–+——————-+
| character_set_connection | latin1            |
| collation_connection     | latin1_swedish_ci |
+————————–+——————-+
·         SQL_NOTES = {0 | 1}

当设置为1时(默认情况),“注意”一级的警报被记录下来。当设置为0时,“注意”警告被压制。

Mysqldump包含输出,用于把此变量设置为0,这样,对于不会影响重新载入操作整体性的事件,重新载入转

储文件时不会产生警告。

·         SQL_AUTO_IS_NULL = {0 | 1}

如果设置为1(默认情况),您可以通过使用以下结构查找包含一个AUTO_INCREMENT列的表的最后插入的行:
WHERE auto_increment_column IS NULL

此性质被有些ODBC程序,比如Access使用。
·         SQL_BIG_SELECTS = {0 | 1}

如果设定为0,则MySQL会放弃有可能会花很长时间来执行的SELECT语句(也就是,对于这些语句,优化程序

估算被检查的行的数目超过了max_join_size的值)。当一个不妥当的WHERE语句被发布后,本语句有用。一

个新连接的默认值为1,这可以允许所有的SELECT语句。

如果您把max_join_size系统变量设置为除DEFAULT以外的值,则SQL_BIG_SELECTS被设置为0。

·         SQL_BUFFER_RESULT = {0 | 1}

SQL_BUFFER_RESULT会迫使来自SELECT语句的结果被放入临时表中。这可以帮助MySQL早点解除表锁定。当需

要花较长时间把结果发送给客户端时,这是有好处的。

·         SQL_LOG_BIN = {0 | 1}

如果设置为0,则客户端的二进制日志中不会记录日志。客户端必须拥有SUPER权限来设置此选项。

·         SQL_LOG_OFF = {0 | 1}

如果设置为1,则此客户端的总查询日志中不会记录日志。客户端必须拥有SUPER权限来设置此选项。

·         SQL_LOG_UPDATE = {0 | 1}

不赞成使用本变量。本变量被映射到SQL_LOG_BIN。

·         SQL_QUOTE_SHOW_CREATE = {0 | 1}

如果设置为1,则SHOW CREATE TABLE会对表和列的名称加引号。如果设置为0,则加引号操作被禁用。默认情

况下,本选项被启用,因此对于含有需要加引号的名称的表,复制操作起作用。请参见13.5.4.5节,“SHOW

CREATE TABLE语法”。

·         SQL_SAFE_UPDATES = {0 | 1}

如果设置为1,则MySQL会放弃在WHERE子句或LIMIT子句中不使用关键字的UPDATE或DELETE语句。这样,当关

键字使用不正确时,也有可能理解UPDATE或DELETE语句。这样就可以更改或删除大量的行。

·         SQL_SELECT_LIMIT = {value | DEFAULT}

从SELECT语句返回的记录的最大数目。对于一个新连接,默认值是“unlimited”。如果您更改了限值,可以

使用SQL_SELECT_LIMIT DEFAULT值恢复默认值。

如果SELECT有一个LIMIT子句,则LIMIT优先于SQL_SELECT_LIMIT值。

SQL_SELECT_LIMT不适用于在被存储的子程序中执行的SELECT语句。它也不适用于不会产生将被返回到客户端

的结果集合的SELECT语句。这些包括子查询中的SELECT语句,CREATE TABLE…SELECT和INSERT

INTO…SELECT。

·         SQL_WARNINGS = {0 | 1}

本变量用于控制当出现警告时,单行INSERT语句是否产生一个信息字符串。默认值为0。把值设置为1,来产

生一个信息字符串。

·         TIMESTAMP = {timestamp_value | DEFAULT}

用于为此客户端设置时间。当您使用二进制日志来恢复行时,本语句用于得到原始的时间标记。

timestamp_value应为一个Unix时间标记,而不是MySQL时间标记。

·         UNIQUE_CHECKS = {0 | 1}

如果设置为1(默认情况),则会对InnoDB表中的二级索引执行唯一性检查。如果设置为0,则对于被插入到

InnoDB的插入缓冲器中的索引登录项,不执行唯一性检查。如果您可以肯定您的数据不违反唯一性要求,则

您可以把此值设定为0,以加快向InnoDB导入大型表的速度。



Copyright 2019. All rights reserved.

Posted 2013年9月29日 by ucjmh in category "oracle

Leave a Reply

Your email address will not be published. Required fields are marked *