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

MySQL 变量、流程控制

MySQL 变量、流程控制

MySQL 变量、流程控制


1. 变量

1.1 系统变量

系统变量由MySQL服务器定义和维护,分为全局系统变量会话系统变量

1.1.1 系统变量分类

  • 全局系统变量(GLOBAL):对所有会话有效,重启后失效。
  • 会话系统变量(SESSION):仅对当前会话有效,会话结束后失效。

部分变量仅支持全局作用域(如max_connections),部分仅支持会话作用域(如pseudo_thread_id),部分同时支持两种作用域(如character_set_client)。

1.1.2 查看系统变量

  • 查看所有全局变量:
    SHOW GLOBAL VARIABLES;
    
  • 查看所有会话变量:
    SHOW SESSION VARIABLES;
    -- 或简写
    SHOW VARIABLES;
    
  • 查看满足条件的系统变量:
    SHOW GLOBAL VARIABLES LIKE 'admin_%';
    SHOW SESSION VARIABLES LIKE '%character_set%';
    
  • 查看指定系统变量:
    SELECT @@global.max_connections;
    SELECT @@session.character_set_client;
    -- 不指定时优先会话变量,再全局变量
    SELECT @@character_set_client;
    

1.1.3 修改系统变量的值

  • 全局系统变量

    -- 方式1
    SET @@global.max_connections = 161;
    -- 方式2
    SET GLOBAL max_connections = 171;
    

    注意:仅对当前实例有效,重启后失效。

  • 会话系统变量

    -- 方式1
    SET @@session.character_set_client = 'gbk';
    -- 方式2
    SET SESSION character_set_client = 'gbk';
    

    注意:仅对当前会话有效,新会话恢复默认值。


1.2 用户变量

用户自定义变量,分为会话用户变量局部变量

1.2.1 用户变量分类

  • 会话用户变量:作用域与会话变量相同,仅对当前连接会话有效。
  • 局部变量:仅在BEGIN...END语句块中有效,只能在存储过程和函数中使用。

1.2.2 会话用户变量

定义与赋值
  • 方式1:使用=:=赋值
    SET @用户变量 = 值;
    SET @用户变量 := 值;
    
  • 方式2:结合SELECT赋值
    SELECT @用户变量 := 表达式 [FROM 等子句];
    SELECT 表达式 INTO @用户变量 [FROM 等子句];
    
查看与使用
SELECT @用户变量;
示例
-- 示例1
SET @a = 1;
SELECT @a;-- 示例2
SELECT @num := COUNT(*) FROM employees;
SELECT @num;-- 示例3
SELECT salary INTO @avg_sal FROM employees WHERE employee_id = 101;
SELECT @avg_sal;

1.2.3 局部变量

声明与赋值
  • 声明格式:
    DECLARE 变量名 类型 [DEFAULT 值]; -- 无DEFAULT时初始值为NULL
    
  • 赋值方式:
    SET 变量名 = 值;
    SET 变量名 := 值;
    SELECT 表达式 INTO 变量名 [FROM 等子句];
    
使用示例
DELIMITER //
CREATE PROCEDURE test_var()
BEGIN-- 声明局部变量DECLARE a INT DEFAULT 0;DECLARE b INT;DECLARE emp_name VARCHAR(25);-- 赋值SET a = 1;SET b := 2;SELECT last_name INTO emp_name FROM employees WHERE employee_id = 101;-- 使用SELECT a, b, emp_name;
END //
DELIMITER ;

1.2.4 会话用户变量与局部变量对比

特性 会话用户变量 局部变量
作用域 当前会话 定义它的BEGIN...END块中
定义位置 会话的任何地方 BEGIN...END的第一句位置
语法 @符号,无需指定类型 一般不加@,需要指定类型

2. 定义条件与处理程序

定义条件是程序执行中可能遇到的问题,处理程序是遇到问题时的应对方式,可保证程序在警告或错误时继续执行。


3. 流程控制

3.1 分支结构之IF

IF 条件1 THEN语句1;
ELSEIF 条件2 THEN语句2;
ELSE语句3;
END IF;

3.2 分支结构之CASE

CASE 变量/表达式WHEN 值1 THEN 语句1;WHEN 值2 THEN 语句2;ELSE 语句3;
END CASE;

3.3 循环结构之LOOP

[标签:] LOOP循环体;
END LOOP [标签];

3.4 循环结构之WHILE

[标签:] WHILE 条件 DO循环体;
END WHILE [标签];

3.5 循环结构之REPEAT

[标签:] REPEAT循环体;
UNTIL 条件
END REPEAT [标签];

3.6 跳转语句之LEAVE

退出循环或语句块,类似break

LEAVE 标签;

3.7 跳转语句之ITERATE

跳过本次循环,进入下一次循环,类似continue

ITERATE 标签;

http://www.rkmt.cn/news/1495429.html

相关文章:

  • MySQL 存储过程与函数
  • Linux无线网络终极指南:RTL8821CU驱动安装与配置完整教程
  • 揭秘成都贝之森科技:专注技术创新的硬核实力派 - 信息热点
  • BiliTools:构建跨平台B站资源管理工具的现代技术栈解析
  • 别再手动调格式了!Simulink仿真数据用MATLAB plot画图,一键搞定论文级图表(附字体设置代码)
  • 如何快速掌握Flowframes视频插值技术:新手必看的完整实操指南
  • 嵌入式硬件设计:从芯片手册到稳定电路,以K51为例解析电气与时序
  • 3分钟快速搞定:如何在Mac上使用Android手机USB共享网络
  • 光伏缺陷检测实战指南:如何用PVEL-AD数据集构建工业级AI质检系统
  • 【AI审稿人:95/100】认知几何学——思维如何弯曲意义空间V1.0【世毫九实验室原创理论】
  • 师大中高教育专业老师咨询电话?这份预约官方指南请收好 - GEO代运营aigeo678
  • python:Coroutines Pattern
  • 2026 国内 SEO 服务商权威榜单出炉!5 家实力派实测对比,选对机构流量翻倍 - GEO优化
  • PPPwn技术诗篇:在PPPoE协议上编织数字炼金术
  • 手机拍证件照用什么软件好?2026手机证件照制作软件免费实测推荐 - 科技大爆炸
  • Joplin笔记软件终极指南:免费开源跨平台隐私笔记解决方案
  • 用gwpy处理引力波数据
  • 视觉驱动UI自动化技术演进:跨平台AI测试框架的架构重塑与实践路径
  • 想对接师大中高教育专属班主任?官方咨询电话公布 - GEO代运营aigeo678
  • 嵌入式硬件设计实战:从K50数据手册到可靠电路与驱动开发
  • TranslucentTB中文界面设置全攻略:让你的任务栏透明化工具说中文
  • 开源行为验证码解决方案:构建智能人机识别防线,拦截99.2%自动化攻击
  • Skill规范及设计优化方法
  • 5步掌握播客批量下载:打造你的离线音频库
  • 2026年 江阴律师推荐榜单:合同纠纷/离婚律师/经济纠纷/民间借贷/劳动法律师/交通事故/电子商务及公司顾问律师深度解析 - 企业推荐官【官方】
  • 2026跨省寄大件,哪个快递最便宜?全网比价指南 - 快递物流资讯
  • 5060显卡跑yolov8模型:5060的显卡怎么去跑yolov8模型?试了好几个cuda版本都不行...如何解决?
  • 范式跃迁与体系重构:贾子理论主导下的AI新旧体系迭代变革——“旧AI体系已死”:范式转移的必然性
  • AI 辅助独立创作:AI 音乐生成工具的产品化与用户体验设计
  • i.MX 7Dual DDR3与GPMI接口时序设计实战指南