💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 变量 Mysql本质是一种编程语言,需要很多变量来保存数据。Mysql中很多的属性控制都是通过mysql中固有的变量来实现的。 ## 系统变量 系统内部定义的变量,系统变量针对所有用户(MySQL客户端)有效。 查看系统所有变量:show variables [like ‘pattern’]; Mysql允许用户使用select查询变量的数据值(系统变量) 基本语法:select @@变量名; 修改系统变量:分为两种修改方式 1、 局部修改(会话级别):只针对当前自己客户端当次连接有效 基本语法:set 变量名 = 新值; 2、 全局修改:针对所有的客户端,“所有时刻”都有效 基本语法:set global 变量名 = 值; || set @@global.变量名 = 值; 全局修改之后:所有连接的客户端并没发现改变?全局修改只针对新客户端生效(正在连着的无效) 注意:如果想要本次连接对应的变量修改有效,那么不能使用全局修改,只能使用会话级别修改(set 变量名 = 值); # 普通变量 不带@符号 定义:declare 变量名 类型名 [default 默认值]; //普通变量必须先这样定义 赋值形式:set 变量名=值; 取值:就直接使用变量名; 只能在编程环境中使用:1.定义函数内部2.定义存储过程的内部3.定义触发器的内部; 作用范围在begin到end语句块之间。在该语句块里设置的变量,declare语句专门用于定义局部变量。 1、 局部变量是使用declare关键字声明 2、 局部变量declare语句出现的位置一定是在begin和end之间(beginend是在大型语句块中使用:函数/存储过程/触发器) 3、 声明语法:declare 变量名 数据类型 [属性]; # 会话变量 带@符号 定义形式(其实也是赋值形式):set @变量名=值; 取值:就基本使用变量名 使用场所,哪里都可以 在mysql中因为没有比较符号==,所以是用=代替比较符号:有时候在赋值的时候,会报错:mysql为了避免系统分不清是赋值还是比较:特定增加一个变量的赋值符号: := Set @变量名 := 值; Mysql是专门存储数据的:允许将数据从表中取出存储到变量中:查询得到的数据必须只能是一行数据(一个变量对应一个字段值):Mysql没有数组。 1、 赋值且查看赋值过程:select @变量1 := 字段1,@变量2 := 字段2 from 数据表 where 条件; ![](https://box.kancloud.cn/f76756235c0fe1445df1a87d93dc115a_2026x1266.jpg) 2、 只赋值,不看过程:select 字段1,字段2… from 数据源 where条件 into @变量1,@变量2… ![](https://box.kancloud.cn/3c28a46a4bc8714e14e7ace2ee57cdca_1940x926.jpg) # 变量赋值有如下形式 1.(针对普通变量): set 变量名=表达式; #此语法中的变量必须先使用declare声明 2.(针对会话变量): set @变量名=表达式; #此方式可以无需declare语法声明,而是直接赋值 3.(针对会话变量): select @变量名 := 表达式; #此语句会给该变量赋值,同时会作为一个select语句输出结果集 4.(针对会话变量): select 表达式 into @变量名; #此语句虽然看起来是select语句,但其实并不输出结果集,而只是给变量赋值