详细分析Mysql临时变量的基本知识(附Demo)

目录

  • 前言
  • [1. 用户变量](#1. 用户变量)
  • [2. 会话变量](#2. 会话变量)

前言

临时变量主要分为用户变量和会话变量

1. 用户变量

用户变量是特定于会话的,在单个会话内可以在多个语句中共享

  • @ 符号开头
  • 在 SQL 语句中使用 SET 语句或直接在查询中赋值

声明和赋值

sql 复制代码
SET @var_name = value;
-- 或者
SELECT @var_name := value;

使用

sql 复制代码
SELECT @var_name;

注意事项如下:

  • 在声明时不需要指定数据类型,MySQL 会自动根据赋值的内容推断类型
  • 在 SQL 语句中区分大小写
  • 声明用户变量时没有赋值,它们的值将为 NULL
  • 在查询中,用户变量会根据查询的执行顺序进行赋值和计算,容易引起不期望的结果,需要小心使用

简单赋值:

在查询中使用用户变量:

sql 复制代码
-- 创建示例表
CREATE TABLE sales (
    id INT AUTO_INCREMENT PRIMARY KEY,
    amount DECIMAL(10, 2)
);

-- 插入示例数据
INSERT INTO sales (amount) VALUES (100.00), (200.00), (300.00);

-- 使用用户变量计算累计总和
SET @total = 0;
SELECT id, amount, @total := @total + amount AS cumulative_total
FROM sales;

截图如下:

2. 会话变量

会话变量也称为系统变量,整个会话期间保持有效

不过可以是全局的或会话特定的

设置会话变量SET SESSION var_name = value;
设置全局变量SET GLOBAL var_name = value;
查看会话变量SHOW VARIABLES LIKE 'var_name';

注意事项:

  • 会话变量仅在当前会话中有效,而全局变量在所有会话中有效,但必须有足够的权限来设置全局变量
  • 设置会话变量时,应该确保其值是合理的,以避免对数据库性能产生负面影响
  • 一些会话变量的更改可能会立即生效,而另一些可能需要重新启动服务器才能生效

示例 1:设置并查看会话变量

sql 复制代码
-- 设置会话变量
SET SESSION sql_mode = 'STRICT_TRANS_TABLES';

-- 查看会话变量
SHOW VARIABLES LIKE 'sql_mode';

截图如下:

示例 2:设置并查看全局变量

sql 复制代码
-- 设置全局变量
SET GLOBAL max_connections = 200;

-- 查看全局变量
SHOW VARIABLES LIKE 'max_connections';

截图如下:

相关推荐
悟能不能悟44 分钟前
redis的红锁
数据库·redis·缓存
贝多芬也爱敲代码2 小时前
如何减小ES和mysql的同步时间差
大数据·mysql·elasticsearch
安当加密3 小时前
MySQL数据库透明加密(TDE)解决方案:基于国密SM4的合规与性能优化实践
数据库·mysql·性能优化
007php0073 小时前
某大厂跳动面试:计算机网络相关问题解析与总结
java·开发语言·学习·计算机网络·mysql·面试·职场和发展
JH30734 小时前
第七篇:Buffer Pool 与 InnoDB 其他组件的协作
java·数据库·mysql·oracle
板凳坐着晒太阳4 小时前
ClickHouse 配置优化与问题解决
数据库·clickhouse
数据库生产实战4 小时前
解析Oracle 19C中并行INSERT SELECT的工作原理
数据库·oracle
AAA修煤气灶刘哥5 小时前
服务器指标多到“洪水泛滥”?试试InfluxDB?
数据库·后端·面试
阿沁QWQ5 小时前
MySQL服务器配置与管理
服务器·数据库·mysql
程序新视界6 小时前
MySQL“索引失效”的隐形杀手:隐式类型转换,你了解多少?
数据库·mysql·dba