详细分析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';

截图如下:

相关推荐
一个天蝎座 白勺 程序猿35 分钟前
Apache IoTDB(7):设备模板管理——工业物联网元数据标准化的破局之道
数据库·apache·时序数据库·iotdb
sky-stars38 分钟前
.NET 任务 Task、Task.Run()、 Task.WhenAll()、Task.WhenAny()
数据库·php·.net
稚辉君.MCA_P8_Java43 分钟前
Java 基本数据类型 - 四类八种
java·linux·后端·mysql·架构
技术砖家--Felix1 小时前
Spring Boot数据访问篇:整合MyBatis操作数据库
数据库·spring boot·mybatis
银河技术1 小时前
Redis 限流最佳实践:令牌桶与滑动窗口全流程实现
数据库·redis·缓存
小白考证进阶中1 小时前
如何拿到Oracle OCP(Oracle 19c)?
数据库·oracle·dba·开闭原则·ocp认证·oracle认证·oracleocp
IAR Systems2 小时前
使用J-Link Attach NXP S32K3导致对应RAM区域被初始化成0xDEADBEEF
arm开发·数据库·嵌入式软件开发·iar
RestCloud2 小时前
OceanBase 分布式数据库的 ETL 实践:从抽取到实时分析
数据库·分布式·postgresql·oceanbase·etl·数据处理·数据同步
星光一影2 小时前
基于Jdk17+SpringBoot3AI智慧教育平台,告别低效学习,AI精准导学 + 新架构稳跑
java·学习·mysql
骑着bug的coder2 小时前
第1讲:入门篇——把MySQL当成Excel来学
后端·mysql