MySQL变量

本文介绍了MySQL的三种变量类型:系统(全局)变量,会话变量和局部变量。系统变量对所有客户端有效,可通过SHOW VARIABLES查看;会话变量与当前连接绑定,可以通过SET语句设置;局部变量在BEGIN和END之间的复合语句中使用,用于临时存储数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.系统变量
系统变量也可称为全局变量,指的就是 MySQL系统内部定义的变量,对所有MySQL客户端都有效.
SHOW [GLOBAL | SESSION] VARIABLES [LIKE’ 匹配模式’ | WHERE 表达式]
GLOBAL:显示全局系统变量值,当变量没有全局值时,则不显示任何值
SESSION:默认的修饰符,可用 LOCAL替换,也可省略,用于显示当前连接中有效的系统可变值,如果变量没有会话值,则显示全局变量值.
SHOW VARIABLES时不带任何条件则可以获取当前连接中系统所有有效的变

查看变量名以auto_inc开头的系统变量:

Show Variables Like 'auto_inc%';

在这里插入图片描述
Select查看指定名称的当前系统变量值:

Select @@query_cache_limit;

在这里插入图片描述

  • 局部修改
    SET 变量名 = 新值;
#1.在客户端1中修改auto_increment_offset的值
Set auto_increment_offset=5;
#2.在客户端2中查看auto_incream_offset的值
Show Variables 
### MySQL变量的定义及作用域 #### 用户定义变量 用户定义变量是一种在会话期间有效的变量,可以通过 `@` 符号进行声明和赋值。这些变量不需要显式的声明即可使用,并且它们的作用范围限于当前用户的会话。 以下是用户定义变量的基本用法: ```sql -- 赋值方法1:使用 SET 命令 SET @my_var = 'Hello, World!'; -- 赋值方法2:在 SELECT 查询中直接赋值 SELECT 'Hello, World!' INTO @my_var; -- 使用变量 SELECT @my_var; ``` 需要注意的是,用户定义变量在整个会话期间都保持其值,直到会话结束或被重新赋值[^1]。 --- #### 局部变量 局部变量主要用于存储过程或函数内部,通常通过 `DECLARE` 关键字进行定义。这类变量的作用域严格限定在其所在的代码块内。 以下是一个简单的例子展示如何定义并使用局部变量: ```sql DELIMITER $$ CREATE PROCEDURE example_procedure() BEGIN DECLARE local_var INT DEFAULT 0; -- 定义局部变量 -- 对局部变量赋值 SET local_var = 10; -- 输出局部变量的值 SELECT local_var; END$$ DELIMITER ; ``` 局部变量只能在其所属的过程或函数范围内访问,超出该范围则无法识别[^2]。 --- #### 系统变量 系统变量是由 MySQL 系统预定义的一组配置项,用于控制服务器的行为。系统变量分为两种类型: - **全局变量**:影响整个 MySQL 实例的行为。 - **会话变量**:仅适用于特定的客户端连接。 ##### 查看系统变量的方法 ```sql -- 查看所有全局变量 SHOW GLOBAL VARIABLES; -- 查看部分全局变量 SHOW GLOBAL VARIABLES LIKE '%char%'; -- 获取单个全局变量的值 SELECT @@global.autocommit; -- 设置全局变量的值 SET GLOBAL autocommit = 0; -- 查看会话变量 SHOW SESSION VARIABLES; -- 获取单个会话变量的值 SELECT @@session.sql_mode; -- 修改会话变量的值 SET SESSION sql_mode = 'STRICT_ALL_TABLES'; ``` 值得注意的是,修改全局变量会影响新建立的会话,默认情况下不会改变现有会话中的对应会话变量[^3]。 --- #### 变量作用域的区别 | 类型 | 定义方式 | 作用域 | |--------------|------------------------------|---------------------------------| | 用户定义变量 | 使用 `@` 符号 | 当前会话 | | 局部变量 | 使用 `DECLARE` | 存储过程/函数内的代码块 | | 系统变量 | 预定义 | 全局(所有会话)或会话(单一连接) | --- ### 示例代码 下面提供了一个综合示例,展示了不同类型变量的应用场景: ```sql -- 用户定义变量 SET @user_var = 42; SELECT @user_var; -- 创建带局部变量的存储过程 DELIMITER $$ CREATE PROCEDURE calculate_square(IN input_value INT, OUT result INT) BEGIN DECLARE temp INT; -- 局部变量 SET temp = input_value * input_value; SET result = temp; END$$ DELIMITER ; CALL calculate_square(5, @output); SELECT @output; -- 修改系统变量 SET GLOBAL max_connections = 200; SELECT @@GLOBAL.max_connections; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值