mysql set语法:将全局变量值写入my.cnf使用persist关键字
概述
@@GLOBAL.sql_mode: 全局级别的设置,影响所有新的客户端连接。通常需要具有高级权限才能修改,且修改后对尚未建立连接的新会话生效,对当前已存在的会话无效。MySQL服务器重启后,如果没有在配置文件中永久设定,全局设置将恢复到服务器启动时的默认值或配置文件中的设定。
@@SESSION.sql_mode: 会话级别的设置,只影响当前已建立的会话。可以在会话内随时修改,仅对该会话内的查询有效。即使服务器全局设置改变,已存在的会话仍保持其自身的sql_mode设置,直到会话结束或手动更改。
在MySQL 8.0.36中,如果同时设置了@@GLOBAL.sql_mode、@@SESSION.sql_mode:
对于新建立的会话,其sql_mode初始值将继承自服务器的全局设置@@GLOBAL.sql_mode。
对于已存在的会话,其sql_mode由会话自身的@@SESSION.sql_mode决定,不受全局设置更改的影响,直至会话结束或在会话内主动更改。
mysql set语法官网
https://dev.mysql.com/doc/refman/8.0/en/set-variable.html
在set 中使用persist关键字持久化系统变量【直接上代码】
-- 先查询一下当前的sql_mode
select @@GLOBAL.sql_mode;
-- 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- 要将全局变量值写入my.cnf或mysqld-auto.cnf 使用persist关键字【官网原文描述】
-- 执行下面两行代码
set persist sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
set @@SESSION.sql_mode=@@GLOBAL.sql_mode;
-- set @@LOCAL.sql_mode=@@GLOBAL.sql_mode;
mysql 使用set 设置变量的其它用法【以下内容来源mysql8.0官网】
变量赋值的 SET 语法
SET variable = expr [, variable = expr] ...
variable: {
user_var_name
| param_name
| local_var_name
| {
GLOBAL | @@GLOBAL.} system_var_name
| {PERSIST | @@PERSIST.} system_var_name
| {PERSIST_ONLY | @@PERSIST_ONLY.} system_var_name
| [SESSION | @@SESSION. | @@] system_var_name
}
SET
变量赋值语法使您能够为影响服务器或客户端操作的不同类型的变量赋值:
- 用户定义的变量。请参见 第 11.4 节“用户定义的变量”。
- 存储过程和函数参数,以及存储的程序局部变量。请参见 第 15.6.4 节“存储程序中的变量”。
- 系统变量。请参见 第 7.1.8 节“服务器系统变量”。系统变量也可以在服务器启动时设置,如 第 7.1.9 节 “使用系统变量”中所述。
分配变量值的语句SET
不会写入二进制日志,因此在复制场景中,它仅影响执行该语句的主机。要影响所有复制主机,请在每个主机上执行该语句。