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

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.xdnf.cn/news/19805.html

相关文章:

  • Shell脚本入门:从零到精通
  • C# 原型模式(C#中的克隆)
  • “转”若惊鸿,电磁“通”——耐达讯自动化RS485转Profinet点亮能源新章
  • 【NestJS】HTTP 接口传参的 5 种方式(含前端调用与后端接收)
  • 【卷积神经网络】卷积神经网络的三大核心优势:稀疏交互、参数共享与等变表示
  • C++之基于正倒排索引的Boost搜索引擎项目介绍
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘black’问题
  • 【提示词】...(后续单元)在Prompt 的作用
  • 【linux仓库】万物至简的设计典范:如何用‘文件’这一个概念操纵整个Linux世界?
  • 在Docker中安装MySQL时3306端口占用问题
  • 论文学习30:LViT: Language Meets Vision Transformerin Medical Image Segmentation
  • 使用云手机进行游戏搬砖划算吗?
  • 国内真实的交换机、路由器和分组情况
  • 【保姆级喂饭教程】把chrome谷歌浏览器中的插件导出为CRX安装包
  • LeetCode 925.长按键入
  • 数据结构:希尔排序 (Shell Sort)
  • 【51单片机】【protues仿真】基于51单片机呼叫系统
  • 基于Force-closure评估的抓取计算流程
  • 生成知识图谱与技能树的工具指南:PlantUML、Mermaid 和 D3.js
  • 【AI报表】JimuReport 积木报表 v2.1.3 版本发布,免费可视化报表和大屏
  • 【leetcode】222. 完全二叉树的节点个数
  • Altium Designer中的Net-Tie:解决多网络合并与电气隔离的利器
  • CPTS-Vintage 票据,基于资源的约束委派 (RBCD),DPAPI密钥
  • 自制扫地机器人(二) Arduino 机器人避障设计——东方仙盟
  • Veo Videos Generation API 对接说明
  • 鸿蒙NEXT表单选择组件详解:Radio与Checkbox的使用指南
  • 开源 C++ QT Widget 开发(十)IPC进程间通信--共享内存
  • 零跑汽车8月交付57066台,同比增长超88%
  • amd cpu是x86架构吗
  • 【Audio】静音或振动模式下重复来电响铃