CREATE PROCEDUCE 存储过程名称([参数列表])
BEGIN
...
END;
CALL 名称(参数);
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'xxx'; -- 查询指 定数据库的存储过程及状态信息
SHOW CREATE PROCEDURE 存储过程名称 ; -- 查询某个存储过程的定义
DROP PROCEDUCE [IF EXISTS] 存储过程名称;
在命令行中执行创建存储过程的SQL语句时需要使用delimiter声明SQL语句的结束符
DELIMITER $$; -- 表示接下来执行sql时$$才是一条语句的结束
系统变量 是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)
查看系统变量
SHOW [SESSION|GLOBAL] VARIABLES; -- 查看当前系统的所有变量
SHOW [SESSION|GLOBAL] VARIABLES LIKE '...' -- 对系统变量进行模糊匹配查找
SELECT @@[GLOBAL|SESSION].VAR_NAME; --查看指定变量的值
设置系统变量
SET [GLOBAL|SESSION] VAR_NAME=VALUE;
SET @@[GLOBAL|SESSION].VAR_NAME=VALUE;
注意事项:如果没有指定GLOBAL|SESSION,那么默认为SESSION
用户定义变量 是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用 “@变量名” 使用就可以。其作用域为当前连接
赋值
SET @VAR_NAME=VALUE;
SET @VAR_NAME:=VALUE;
SELECT 字段名 INTO @VAR_NAME FROM TB_NAME; -- 将指定字段值赋值给VAR_NAME
使用
SELECT @VAR_NAME;
注意: 用户定义的变量无需对其进行声明或初始化,只不过获取到的值为NULL
局部变量:是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN … END块
声明
DECLARE 变量名 变量类型 [DEFAULT ...];
赋值
SET 变量名=值;
SET 变量名:=值;
SELECT 字段名 INTO 变量名 FROM 表名 ... ;
if 用于做条件判断,具体的语法结构为
IF 条件1 THEN
.....
ELSEIF 条件2 THEN -- 可选
.....
ELSE -- 可选
.....
END IF;
参数的类型,主要分为以下三种:IN、OUT、INOUT
语法
CREATE PROCEDURE 存储过程名称 ([ IN/OUT/INOUT 参数名 参数类型 ])
BEGIN
-- SQL语句
END ;
语法1
CASE VALUE
WHEN VALUE1 THEN
...
WHEN VALUE2 THEN
...
ELSE
...
END CASE;
语法2
CASE
WHEN 条件1 THEN
...
WHEN 条件2 THEN
...
ELSE
...
END CASE;
WHILE 条件 DO
SQL逻辑...
END WHILE;
repeat是有条件的循环控制语句, 当满足until声明的条件的时候,则退出循环
-- 先执行一次逻辑,然后判定UNTIL条件是否满足,如果满足,则退出。如果不满足,则继续下一次循环
REPEAT
SQL逻辑...
UNTIL 条件
END REPEAT;
LOOP 实现简单的循环,如果不在SQL逻辑中增加退出循环的条件,可以用其来实现简单的死循环
LOOP可以配合一下两个语句使用:
[begin_label:] LOOP
SQL逻辑...
END LOOP [end_label];
LEAVE label; -- 退出指定标记的循环体
ITERATE label; -- 直接进入下一次循环