变量
mysql本质是一种编程语言,需要很多变量保存数据.mysql中很多属性控制都是通过mysql中固有的变量来实现的.
系统变量
系统内部定义的变量,针对所有用户有效.
查看系统变量:show variables [like 'pattern'];

mysql允许用户使用select查询系统变量的实际数据值
基本语法:select @@变量名;

修改系统变量:
1. 局部修改(会话级别):仅针对当前客户端本次连接本身有效,且立即生效.
语法: set 变量名 = 新值;

2.全局修改: 仅针对所有新连接的客户端有效.
语法: set global 变量名=新值 或者 set @@global.变量名=新值;
示例:全局修改系统变量,查看如下:

我们再打开1个新连接客户端对比查看如下:

会话变量
会话变量又叫用户变量,会话变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
格式: set @变量名=值; //使用这种方式mysql可能会有歧义

mysql中没有比较符号==,所以是用=号代替比较符号.mysql系统有时候分不清是赋值还是比较,在赋值的时候会报错.
mysql新增使用变量赋值符号":="(类似Pascal)
格式: set @变量名:=值; //使用这种方式mysql不会产生歧义

通过查询为变量赋值
mysql是专门存储数据的,允许将数据从表中取出存储到变量中.查询得到的数据必须只能是一行数据(一个变量对应一个字段值):mysql没有数组.
- 1. 赋值且查看赋值过程: select @变量1=字段1, @变量2=字段2 from 数据表 where条件;
错误语法:

如上,我们得到了错误的结果,这是为什么呢?
错误原因:就是使用了=号.系统会当做比较符号
解决方案:使用正确的赋值符号 :=

- 2. 只赋值,不看过程: select 字段1,字段2... from 数据源 where条件 into 变量1,变量2...;

查看变量: select @变量名1,@变量名2...,

局部变量
作用范围在begin到end语句块之间.在该语句块里设置的变量,declare语句专门用于定义局部变量
1. 局部变量使用declare声明;
2. declare声明语句在begin和end之间;(begin和end是在大型语句块中使用:函数/存储过程/触发器)
3. 声明语法: declare 变量名 数据类型 [属性];
4.declare声明语句在函数体其他语句之前.
流程结构
流程结构:代码的执行顺序
if分支
基本语法
1. 用在select查询中,当做条件判断;
基本语法: if(条件,为真结果,为假结果)



2. 用在复杂的语句块中(函数/存储过程/触发器)
基本语法:
if 条件表达式 then
满足条件时执行的语句块;
end if;
复合语法
复合语法:代码的判断存在两面性,两面都有对应的代码执行.
基本语法:
if 条件表达式 then
满足条件时执行的语句块;
else
不满足条件时执行的语句块;
/*还可以继续嵌套if - else - end if结构*/
if 条件表达式 then
...;
else
...;
end if;
end if;
While循环
基本语法
循环体需要在大型代码块中使用.
基本语法:
while 条件 do
循环时执行的语句块;
end while;
结构标识符
结构标识符:为某些特定的结构进行命名,然后为的是在某些地方使用名字.
基本语法
标识名字:while 条件 do
循环时执行的语句块;
end while[标识名字];
标识符的存在是为了循环体中使用循环控制.在mysql中没有continue和break,有自己的关键字替代:
iterate:迭代.即以下代码不执行,重新开始循环.(类似continue)
leave: 离开,整个循环终止.(类似break)
标识名字:while 条件 do
if 条件判断 then
循环控制;
iterate/leave 标识名字;
end if;
循环时执行的语句块;
end while[标识名字];
这篇博客详细介绍了MySQL中的变量类型,包括系统变量、会话变量和局部变量的使用,以及流程控制结构,如if分支和while循环的基本语法和应用场景。读者将学习如何设置、查看和修改变量,以及在不同场景下正确使用变量和流程控制结构。
1641

被折叠的 条评论
为什么被折叠?



