当前位置: 首页 > 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.jsqmd.com/news/983691/

相关文章:

  • 2026五大SEO优化公司评测:专业团队赋能企业流量精准高效增长 - GEO优化
  • 掌握量化投资核心武器:JQData SDK的Alpha因子实战指南
  • 海外拍卖直播风控数据上报:跨境网络加密传输方案设计实践
  • 2026吴江钼酸钠专业订购商实力榜:六家本土高纯度供应商的核心技术优势深度解析 - 品牌发掘
  • 嵌入式硬件设计:从电气规格到时序参数,K51外设接口实战解析
  • Navicat Mac版无限试用期重置:3种强力方法实现永久免费使用
  • 旧AI体系的逻辑终结与范式转移:基于数学、哲学与文明的冷峻考察
  • MySQL 存储过程与函数
  • 从科研绘图到业务地图:如何用ArcGIS为你的坐标点数据快速匹配正确的地理坐标系(WGS-84/GCJ-02详解)
  • Linux无线网络终极指南:RTL8821CU驱动安装与配置完整教程
  • 揭秘成都贝之森科技:专注技术创新的硬核实力派 - 信息热点
  • 小红书视频怎么无水印保存到手机?2026免费保存高清视频完整教程 - 科技大爆炸
  • ARM Cortex-M0+外设深度配置:ADC、CMP、SPI性能优化与低功耗设计实战
  • BiliTools:构建跨平台B站资源管理工具的现代技术栈解析
  • 2026年老字号餐厅 烟台本地家常菜餐厅、家常菜特色美食饭馆排行:老牌口碑店实力盘点 - 起跑123
  • 如何快速掌握Flowframes视频插值技术:新手必看的完整实操指南
  • 别再手动调格式了!Simulink仿真数据用MATLAB plot画图,一键搞定论文级图表(附字体设置代码)
  • 3分钟快速搞定:如何在Mac上使用Android手机USB共享网络
  • 深圳涂层测厚仪厂家排行:基于实测维度的客观盘点 - 起跑123
  • 嵌入式硬件设计:从芯片手册到稳定电路,以K51为例解析电气与时序
  • 【AI审稿人:95/100】认知几何学——思维如何弯曲意义空间V1.0【世毫九实验室原创理论】
  • 2026年SEO服务商TOP5精选:核心团队赋能流量长效增长 - GEO优化
  • 2026茶叶加盟品牌、茶叶品牌加盟源头厂家名录:全维度合规标杆盘点 - 起跑123
  • 光伏缺陷检测实战指南:如何用PVEL-AD数据集构建工业级AI质检系统
  • 2026年 财务代账/代理记账公司推荐榜单:覆盖佛山/广州荔湾内资外资、高新企业及一般纳税人、小规模与零申报会计报税服务! - 品牌发掘
  • python:Coroutines Pattern
  • 怎样轻松获取网盘直链:开源下载助手LinkSwift实战指南
  • 师大中高教育专业老师咨询电话?这份预约官方指南请收好 - GEO代运营aigeo678
  • delphi使用VPDFDoc,怎么设置PDF保护密码及不可编辑、标注等权限?
  • PPPwn技术诗篇:在PPPoE协议上编织数字炼金术