当前位置: 首页 > news >正文

Mysql杂志(七)

全局系统变量与会话系统变量

全局系统变量

全局系统变量是MySQL服务器级别的配置参数,控制着整个数据库实例的运行行为。它们具有以下核心特性:服务器级作用域​:影响所有客户端连接、​持久性配置​:可通过配置文件永久保存、​初始化加载​:在MySQL服务启动时加载、集中管理​:由数据库管理员(DBA)统一控制。

这个就好比主包之前有讲过的Maven的父pom和子pom的关系差不多,每个新的会话都会继承全局的环境变量,这个会话大家可以理解成一个一个连接窗口。

-- 基础语法(需要SUPER权限)
SET GLOBAL variable_name = value;-- 实际示例
SET GLOBAL max_connections = 1000;  -- 修改最大连接数
SET GLOBAL wait_timeout = 300;      -- 修改超时时间(秒)
-- 等效语法(使用@@global.)
SET @@global.max_connections = 500;-- 修改并写入配置文件(立即生效+持久化)
SET PERSIST max_connections = 1000;
-- 仅持久化到配置(下次启动生效)
SET PERSIST_ONLY innodb_buffer_pool_size = 8 * 1024 * 1024 * 1024;# my.cnf或my.ini文件
[mysqld]
max_connections = 1000
innodb_buffer_pool_size = 8G#重启命令
sudo systemctl restart mysqld

修改方式

存储位置

持久性

SET GLOBAL

内存

临时性(重启失效)

SET PERSIST

mysqld-auto.cnf

永久

配置文件修改

my.cnf/my.ini

永久

这个全局系统变量修改是需要权限的,因为修改后除了已经创建的会话连接,其他的新连接都会继承修改后的配置,这个行为其实是十分危险的需要权限也是理所应当的,下面这个是权限对照表,此外不是所以的修改都会立即生效,因为有些是静态变量比如说内存大小啊这种,都是需要重启的时候才能更改的。

变量类型

修改操作

所需权限

示例

全局系统变量

SET GLOBAL

SUPER或SYSTEM_VARIABLES_ADMIN

SET GLOBAL max_connections=500

持久化全局变量

SET PERSIST

SYSTEM_VARIABLES_ADMIN

SET PERSIST max_connections=500

会话系统变量

SET SESSION

普通用户权限

SET SESSION wait_timeout=300

用户自定义变量

SET @var

仅需连接权限

SET @debug_mode=1

会话系统变量

会话系统变量(SESSION variables)是MySQL中仅对当前数据库连接生效的配置参数,具有以下核心特性:连接隔离性​:每个连接维护自己独立的变量副本、​继承性​:新建连接时从全局变量继承初始值、​临时性​:连接关闭后所有修改自动丢弃、优先级​:会话设置会覆盖继承的全局值。

-- 标准语法
SET SESSION 变量名 = 值;-- 示例:修改当前会话的超时时间
SET SESSION wait_timeout = 600;  -- 单位:秒-- 等效简写(SESSION可省略)
SET wait_timeout = 600;
SET @@session.wait_timeout = 600;
SET @@wait_timeout = 600;

其实和全局系统变量的修改基本上是相同的,只是前面的关键词是不一样的。下面这个表就是对于用户自定义变量的要求,从表里我们可以看到无论是全局的还是会话的其实都是不支持用户自定义一个系统变量的,这个就有点让主包失望了,因为这样少了很多可玩性。

变量类型

前缀

是否可新增

作用范围

持久性

示例

全局系统变量

❌ 不可新增

整个MySQL实例

重启失效(除非持久化)

max_connections

会话系统变量

❌ 不可新增

当前连接

连接结束失效

wait_timeout

用户会话变量

@

✅ 可自定义

当前连接

连接结束失效

@my_custom_var

局部变量​ (存储过程)

✅ 可自定义

当前BEGIN-END块

过程执行结束

DECLARE x INT

查询系统变量

-- 查看所有会话变量
SHOW SESSION VARIABLES;
SHOW VARIABLES;  -- SESSION可省略-- 模糊匹配查询
SHOW SESSION VARIABLES LIKE 'sql%';-- 精确查询单个变量
SHOW VARIABLES LIKE 'autocommit';#select形式
-- 查询当前会话值
SELECT @@SESSION.autocommit;
SELECT @@autocommit;  -- SESSION可省略-- 对比全局和会话值
SELECT @@GLOBAL.autocommit AS global_val,@@SESSION.autocommit AS session_val;

他们俩的查询都是基本上一样的,只是关键词不一样,现在我们来说一下他们的作用,一般情况下我们是用不到的,只有在对性能有要求的时候才会用到,从上面的几个示范sql就能看到什么连接信息啊、内存最大容量啦这种,下面这个表是比较普通的使用场景,给大家理解一下这个玩意的作用。

场景分类

全局系统变量适用场景

会话系统变量适用场景

资源配置

服务器内存/线程/IO分配

当前连接专用内存设置

性能调优

引擎级参数优化

特定查询的临时优化

安全控制

实例级访问策略

连接级权限控制

数据一致性

复制拓扑配置

事务隔离级别设置

功能开关

全局日志/插件管理

会话调试工具启用

多租户管理

基础硬件资源分配

租户专属时区/字符集

MyBatis-Plus 调用存储过程

今天再来补充一下上一篇的内容,因为上一篇讲存储过程的时候,主包忘记说怎么使用存储过程了,这一篇补税。

先定义一个存储过程

DELIMITER //
CREATE PROCEDURE sp_get_adult_employees( IN p_age INT,OUT p_total INT)
BEGIN-- 查询所有成年员工SELECT * FROM employee WHERE age > p_age;-- 返回总人数SELECT COUNT(*) INTO p_total FROM employee WHERE age > p_age;
END //
DELIMITER ;

然后定义实体类

@Data
public class Employee {private Long id;private String name;private Integer age;private String department;// 其他字段...
}@Data
public class EmployeeResult {private List<Employee> employeeList;private Integer totalCount;
}

然后定义xml和映射

<!-- EmployeeMapper.xml -->
<resultMap id="employeeResultMap" type="com.example.EmployeeResult"><!-- 映射第一个结果集到List --><collection property="employeeList" ofType="com.example.Employee"><id property="id" column="id"/><result property="name" column="name"/><result property="age" column="age"/><result property="department" column="department"/><!-- 其他字段映射 --></collection><!-- 映射输出参数 --><result property="totalCount" column="total" jdbcType="INTEGER"/>
</resultMap><select id="getAdultEmployees" statementType="CALLABLE" resultMap="employeeResultMap">{call sp_get_adult_employees(#{total, mode=OUT, jdbcType=INTEGER})}
</select>

然后再Mapper中使用就可以了

public interface EmployeeMapper extends BaseMapper<Employee> {EmployeeResult getAdultEmployees();
}

总结

本篇主要讲了全局系统变量和会话系统变量的区别,以及全局系统变量和会话系统变量的查询修改,还补充了Mybatis-Plus使用存储过程的方法。

http://www.dtcms.com/a/362722.html

相关文章:

  • Deepin25安装mysql8.4.5
  • 在ROS中获取并发布UBS式传感器的温湿度
  • PostgreSQL(1) FETCH用法
  • 企业数字安全守护神:IT运维管理系统全面解析,构建坚不可摧的防护体系
  • 简陋的RPC
  • 从代码到组件:C语言动态库(DLL)封装与使用终极指南
  • NV115NV119美光固态闪存NV129NV112
  • 加速交通云建设,移动云为我国交通强国目标提供有力支撑
  • AES-GCM和(AES-CBC+SHA2-25-HAMC组合,并且发方通过每次内容,更新iv,填序使用递增数字)算法比较
  • 系统科学核心概念辨析及其在人工智能领域的应用研究:一个整合性分析框架
  • 分布式光纤传感选型 3 问:你的场景该选 DTS、DAS 还是 BOTDA?
  • 解锁WebRTC在数字人领域的无限潜能
  • 面试问题:c++的内存管理方式,delete的使用,vector的resize和reverse,容量拓展
  • 大数据量模块设置渲染性能优化
  • 白电三巨头 2025 年战局:美的领跑破局,海尔稳健筑垒,格力承压求变
  • Spring 中 Hikari 与 Druid 的详细介绍、对比及同类组件分析
  • go-mapus最简单的离线瓦片地图协作
  • 【Linux系统】万字解析,进程间的信号
  • 并发编程——13 线程池ThreadPoolExecutor实战及其原理分析
  • md5sum -c用法详解
  • 【Vue2 ✨】Vue2 入门之旅(八):过渡与动画
  • 基础文本处理工具与文本三剑客其二sed awk
  • unity 中的 gradle building 加速(可能无用,导致包体异常)
  • 【C++详解】C++11(三) 可变参数模板、包扩展、empalce系列接⼝、新的类功能
  • MyBatis:让 SQL 与代码和谐共处的持久层框架
  • React学习教程,从入门到精通, React 入门指南:React JSX 语法知识点详解及案例代码(8)
  • React 学习笔记4 Diffing/脚手架
  • go命令行工具:如何在现有的工程里加入使用cobra
  • 01 - 网页和web标准
  • AI文档产品与传统OCR软件的根本区别是什么?