Mysql(Mariadb)之SET语法分析以及系统变量和用户变量分析(英文&中文)(转载)
SET
Syntax
SET variable_assignment [, variable_assignment] ... variable_assignment:
user_var_name = expr
| [GLOBAL | SESSION] system_var_name = expr
| [@@global. | @@session. | @@]system_var_name = expr
Contents
One can also set a user variable in any expression with this syntax:
user_var_name:= expr
Description
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 was deprecated in favor of SET
without OPTION
, and was removed in MariaDB 10.0.
Changing a system variable by using the SET statement does not make the change permanently. To do so, the change must be made in a configuration file.
For setting variables on a per-query basis (from MariaDB 10.1.2), see SET STATEMENT
.
See SHOW VARIABLES
for documentation on viewing server system variables.
See Server System Variables for a list of all the system variables.
GLOBAL / SESSION
When setting a system variable, the scope can be specified as either GLOBAL or SESSION.
A global variable change affects all new sessions. It does not affect any currently open sessions, including the one that made the change.
A session variable change affects the current session only.
If the variable has a session value, not specifying either GLOBAL or SESSION will be the same as specifying SESSION. If the variable only has a global value, not specifying GLOBAL or SESSION will apply to the change to the global value.
DEFAULT
Setting a global variable to DEFAULT will restore it to the server default, and setting a session variable to DEFAULT will restore it to the current global value.
Examples
- innodb_sync_spin_loops is a global variable.
- skip_parallel_replication is a session variable.
- max_error_count is both global and session.
SELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM
INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE
VARIABLE_NAME LIKE 'max_error_count' OR
VARIABLE_NAME LIKE 'skip_parallel_replication' OR
VARIABLE_NAME LIKE 'innodb_sync_spin_loops';
+---------------------------+---------------+--------------+
| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |
+---------------------------+---------------+--------------+
| MAX_ERROR_COUNT | 64 | 64 |
| SKIP_PARALLEL_REPLICATION | OFF | NULL |
| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |
+---------------------------+---------------+--------------+
Setting the session values:
SET max_error_count=128;Query OK, 0 rows affected (0.000 sec) SET skip_parallel_replication=ON;Query OK, 0 rows affected (0.000 sec) SET innodb_sync_spin_loops=60;
ERROR 1229 (HY000): Variable 'innodb_sync_spin_loops' is a GLOBAL variable
and should be set with SET GLOBAL SELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM
INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE
VARIABLE_NAME LIKE 'max_error_count' OR
VARIABLE_NAME LIKE 'skip_parallel_replication' OR
VARIABLE_NAME LIKE 'innodb_sync_spin_loops';
+---------------------------+---------------+--------------+
| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |
+---------------------------+---------------+--------------+
| MAX_ERROR_COUNT | 128 | 64 |
| SKIP_PARALLEL_REPLICATION | ON | NULL |
| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |
+---------------------------+---------------+--------------+
Setting the global values:
SET GLOBAL max_error_count=256; SET GLOBAL skip_parallel_replication=ON;
ERROR 1228 (HY000): Variable 'skip_parallel_replication' is a SESSION variable
and can't be used with SET GLOBAL SET GLOBAL innodb_sync_spin_loops=120; SELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM
INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE
VARIABLE_NAME LIKE 'max_error_count' OR
VARIABLE_NAME LIKE 'skip_parallel_replication' OR
VARIABLE_NAME LIKE 'innodb_sync_spin_loops';
+---------------------------+---------------+--------------+
| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |
+---------------------------+---------------+--------------+
| MAX_ERROR_COUNT | 128 | 256 |
| SKIP_PARALLEL_REPLICATION | ON | NULL |
| INNODB_SYNC_SPIN_LOOPS | NULL | 120 |
+---------------------------+---------------+--------------+
SHOW VARIABLES will by default return the session value unless the variable is global only.
SHOW VARIABLES LIKE 'max_error_count';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_error_count | 128 |
+-----------------+-------+ SHOW VARIABLES LIKE 'skip_parallel_replication';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| skip_parallel_replication | ON |
+---------------------------+-------+ SHOW VARIABLES LIKE 'innodb_sync_spin_loops';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| innodb_sync_spin_loops | 120 |
+------------------------+-------+
Using the inplace syntax:
SELECT (@a:=1);
+---------+
| (@a:=1) |
+---------+
| 1 |
+---------+ SELECT @a;
+------+
| @a |
+------+
| 1 |
+------+
原文:https://mariadb.com/kb/en/set/
tag1:【系统变量】
0.系统变量是mysql启动时需要初始化的具有某种特定功能的变量,如error_log系统变量定义了错误日志是否记录。系统变量可以认为有2种形式,一种是系统全局变量(system global variables),一种是系统会话变量(system session variables)。有的系统变量只有全局变量,没有会话变量形式,那么此时会话变量的取值默认就是系统变量的默认值。
1.系统全局变量与系统会话变量的影响范围,系统全局变量是设置后对所有的新产生的会话产生影响(新会话的系统全局变量和系统会话变量都会变为最新的系统全局变量值)。系统会话变量,仅仅对当前用户的当前会话的系统会话变量产生影响。
2.系统会话变量的修改,仅仅对当前用户的当前会话的系统会话变量产生影响,set (session) 系统变量名 = 变量值,对当前会话的global 系统变量名的值不产生影响,同理,set global 系统变量名,对当前会话的系统会话变量名不产生影响,但set global 系统变量名会对新建立的会话的global系统变量和session系统变量构成影响。使用set修改系统变量只是动态修改,比如set global error_log = on;设置后,mysql重启后该修改会丢失,mysql启动时会加载配置文件如/etc/my.cnf中的系统变量预置值作为系统变量的初始值。
3.系统变量的作用原理,同一个系统变量,有的同时有系统会话变量值和系统全局变量值(分别存储在global_variables和session_variables表中),有的只有系统全局变量,没有系统会话变量(此时当前会话的当前系统会话变量的值默认效果就是该全局变量的值的效果)。我们知道某个系统变量对系统的实际作用是通过系统会话变量为准的,比如error_log选项变量,如果系统全局变量值与系统会话变量值不同那么当前会话以系统会话变量值的效果为准,比如error_log的系统会话变量值是错误日志是否开启的标志。
tag2:【用户变量】
0.用户变量就是用户自定义的变量,区别于系统变量。
1.用户变量一般分为用户会话变量和用户局部变量。
2.用户会话变量,仅仅在整个会话有效期内有效,可以在程序任何地方修改定义。定义方法为set @变量名=变量值;如set @var1=2;select @var2;仅仅在当前会话中有效。当前会话结束则变量销毁。与系统会话变量的定义修改方式基本一样。
3.用户局部变量,用户局部变量只能在某种特殊代码块中定义。 a:用户局部变量仅仅在当前会话有效。b:用户局部变量仅仅在某个程序段内部有效,其它地方无效,而不是像用户会话变量那样,在任意地方都可以定义和修改(通过set @变量名,如set @var1=44;),定义用户局部变量需要在某种特殊的区域中,如procedure内部(如果非特殊区域内只能定义和修改用户自定义的用户局部变量,报ERROR 1054 (42S22): Unknown column 'd' in 'field list'错误)。比如我们在一个procedure中set var1=2;select var1;procedure中定义的会话变量也叫做过程变量procedure variables,是用户局部变量的一种,这种变量仅仅在call调用当前procedure时候有效,调用结束过程变量销毁。但是在procedure中定义和修改的用户会话变量仍然是全局有效的。用户局部变量类似于php的函数内定义的变量。
案例:
CREATE PROCEDURE prc_test ()
BEGIN
DECLARE var2 INT DEFAULT 1;
SET var2 := var2 + 1;
SET @var2 := @var2 + 1;
SELECT var2, @var2;
END;
SET @var2 = 1;
CALL prc_test();
var2 @var2
--- ---
2 2
CALL prc_test();
var2 @var2
--- ---
2 3
CALL prc_test();
var2 @var2
--- ---
2 4
欢迎加我们微信wang1415035017进入微信高级技术群共同进步,或者扫码加入我们哦(V_V)
Mysql(Mariadb)之SET语法分析以及系统变量和用户变量分析(英文&中文)(转载)的更多相关文章
- 【Mysql】了解Mysql中的启动参数和系统变量
一.启动参数 在程序启动时指定的设置项也称之为启动选项(startup options),这些选项控制着程序启动后的行为. 1)在命令行上使用选项 启动服务器程序的命令行后边指定启动选项的通用格式就是 ...
- Ubuntu环境变量——系统变量和用户变量
系统变量: 对所有用户有效果 /etc/profile /etc/environment 两个命令只用一个就可以,原则上是重启后修改生效,但是经过验证可以通过执行以下命令实现: source /etc ...
- MySQL/MariaDB数据库的服务器配置
MySQL/MariaDB数据库的服务器配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL中的系统数据库 1>.mysql数据库 是mysql的核心数据库,类 ...
- MySQL/MariaDB数据库的函数
MySQL/MariaDB数据库的函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MySQL/MariaDB数据库的函数分为系统函数和用户自定义函数(user-define ...
- 黑马MySQL数据库学习day04 MySQL变量 存储过程 用户和授权管理
/* MySQL中的变量局部变量,用户变量,会话变量和全局变量. 用户变量不用定义,直接使用. 1.用户变量赋值 set @xxx = 值; 2.查询 select @xxx; 语法帮助: 过程保存在 ...
- CAD系统变量(参数)大全
所谓系统变量就是一些参数,这些参数有些是可以在“选项”或其他对话框中进行设置的,有些这必须通过在命令行输入变量名进行设置,当然对于高手来说,还可以通过二次开发程序来进行控制. CAD有很多的变量,例如 ...
- Phpcms所有系统变量列表 Phpcms V9 文件目录结构
Phpcms所有系统变量列表 用户变量: view plaincopy to clipboardprint? $_userid 用户id $_username 用户名 $_areaid ...
- 转:用AutoCAD 系统变量编程
Autocad的系统变量, 我们可以通过如下得到: Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable(/*MSG0* ...
- Mysql 系统参数 系统变量 状态变量
1.系统参数,也就是命令行选项,执行命令的时候,后面跟的参数,系统参数很多,不可能每次执行程序的时候,指定这些参数.这些参数写在配置文件(Windows下是my.ini,Linux是my.cnf),执 ...
随机推荐
- )ASCII比较大小
有一个注意点: 就是在字符输入时,要用getchar诋毁那个回车键 几个比较重要的error .听了学长的没有再用void main,结果结尾忘了return ,但是竟然也编译运行成功并提交了,ole ...
- 96)PHP,文件上传(2)
(1)那么既然看到文件即使上传成功,但是只是在脚本周期内有效,脚本只要结束(脚本结束其实很快的),文件就会自动消失,那么怎么才能永久存储文件呢: 函数: Move_uploaded_file(上传临时 ...
- Sampling Distribution of the Sample Mean|Central Limit Theorem
7.3 The Sampling Distribution of the Sample Mean population:1000:Scale are normally distributed with ...
- Oracle 10G 服务端的升级
第一步:备份 rman target / backup full database plus archivelog; 第二步:升级 解压升级包到soft目录下,修改所有者 chown -R oracl ...
- spring学习笔记二:spring使用构造方法注入(set方式注入)
项目目录树: 1.spring的依赖包配置 * SPRING_HOME/dist/spring.jar * SPRING_HOME/lib/log4j/log4j-1.2.14.jar * SPRIN ...
- Python-删除多级目录
def rmdirs(top): for root, dirs, files in os.walk(top, topdown=False): # 先删除文件 for name in files: os ...
- Android开发之《内存对齐》
为什么要进行内存对齐以及对齐规则:http://www.cnblogs.com/jijiji/p/4854581.html 1. 在32位系统中定义变量最好用int,因为这样效率高.原因就在于32位的 ...
- 通用 mapper的简单使用
通用 MAPPER的简单使用 官方 https://mapperhelper.github.io/docs/2.use/ 依赖 <dependency> <groupId>t ...
- 创业的游戏 明星APP上市前后的冰火两重天
明星APP上市前后的冰火两重天" title="创业的游戏 明星APP上市前后的冰火两重天"> 当下,似乎只有创业才是能够实现笑看风云变幻的那条"黄金通道 ...
- 吴裕雄--天生自然 python开发学习笔记:pycharm无法使用ctrl+c/v复制粘贴的问题
在使用pycharm的时候发现不能正常使用ctrl+c/v进行复制粘贴,也无法使用tab键对大段代码进行整体缩进.后来发现是因为安装了vim插件的问题,在setting里找到vim插件,取消勾选即可解 ...