目录
变量
分为系统变量、用户自定义变量
系统变量
不是用户自定义,属于服务器层面。
系统变量分类
- 全局系统变量(global)
备注: 静态变量(在 MySQL 服务实例运行期间它们的值不能使用 set 动态修改)属于特殊的全局系 统变量。
- 会话系统变量(session)
如果不标记级别,默认是session。
查看指定的系统变量
作为 MySQL 编码规范,MySQL 中的系统变量以 两个“@” 开头,其中“@@global”仅用于标记全局系统变 量,“@@session”仅用于标记会话系统变量。“@@”首先标记会话系统变量,如果会话系统变量不存在, 则标记全局系统变量。
修改系统变量的值
方式1:修改MySQL 配置文件 ,继而修改MySQL系统变量的值(该方法需要重启MySQL服务)
方式2:在MySQL服务运行期间,使用“set”命令重新设置系统变量的值
用户变量
用户变量分类
会话用户变量 和 局部变量
- 会话用户变量:作用域和会话变量一样,只对 当前连接 会话有效。
- 局部变量:只在 BEGIN 和 END 语句块中有效。局部变量只能在 存储过程和函数 中使用。
会话用户变量
变量的定义
查看用户变量的值
SELECT @用户变量
局部变量
定义:可以使用 DECLARE 语句定义一个局部变量
作用域:仅仅在定义它的 BEGIN ... END 中有效
位置:只能放在 BEGIN ... END 中,而且只能放在第一句
用法如图:
对比会话用户变量与局部变量
定义条件与处理程序(省略)
流程控制
分支结构之 IF
IF 表达式1 THEN 操作1
[ELSEIF 表达式2 THEN 操作2]……
[ELSE 操作N]
END IF
分支结构之 CASE
循环结构之LOOP
循环结构之WHILE
[while_label:] WHILE 循环条件 DO
循环体 END WHILE
[while_label];
循环结构之REPEAT
跳转语句之LEAVE
跳转语句之ITERATE
游标
类似于指针,可以一行行缓存输出,让SQL这种面向集合的语言有了面向过程开发的能力
用法:
1.声明游标
DECLARE cursor_name CURSOR FOR select_statement;
这里 select_statement 代表的是 SELECT 语句,返回一个用于创建游标的结果集。
2.打开游标
OPEN cursor_name
3.使用游标
FETCH cursor_name INTO var_name [, var_name] ...
这句的作用是使用 cursor_name 这个游标来读取当前行,并且将数据保存到 var_name 这个变量中,游 标指针指到下一行。如果游标读取的数据行有多个列名,则在 INTO 关键字后面赋值给多个变量名即可。 游标的查询结果集中的字段数,必须跟 INTO 后面的变量数一致 。
4.关闭游标
CLOSE cursor_name
游标声明的位置必须在声明变量的后面