一 流程构造语句
1>语法
分隔符 概念 用于区分过程的开始和结束的符号
delimiter //
/**定义存储过程**/
//
2变量定义
1>全局变量 必须是show variables存在的变量
通过自动提交变量演示
local/session 修改了 只对当前的session有效
global 修改了 对所有的session都有效
1>查看变量是否支持 session或者 global
SHOW [GLOBAL|LOCAL|SESSION] VARIABLES LIKE 'autocommit'
2>通过变量的方式去获取
SELECT @@autocommit
SELECT @@session.autocommit
SELECT @@global.autocommit
3>设置变量
set @@autocommit=off --修改session
set @@global.autocommit=off 或者 set global autocommit=off --修改全局的
2>临时变量
1>session级别临时变量
直接使用 @变量名称 无需定义
set @sex='男';
2>局部变量
declare 变量名 类型 default 默认值
set 变量名=值
SELECT 列1,列2 INTO 变量1,变量2 FROM 表 WHERE 条件
3 if条件分支
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF;
case分支
sql语句中 使用case
SELECT CASE gname
WHEN 'aa' THEN '1501'
WHEN 'nn' THEN '1502'
END AS gradename FROM grade;
过程语句使用
DELIMITER //
CREATE PROCEDURE testdefine(sex INT)
BEGIN
CASE WHEN sex=1 THEN
SELECT '男';
WHEN sex=2 THEN
SELECT '女';
ELSE
SELECT '未知';
END CASE;
END
//
4 循环
1>loop循环
循环的定义:
[begin_label:] LOOP
statement_list
END LOOP [end_label]
LEAVE label
这个语句被用来退出任何被标注的流程控制构造。它和BEGIN ... END或循环一起被使用。
ITERATE label
ITERATE只可以出现在LOOP, REPEAT, 和WHILE语句内。ITERATE意思为:“再次循环。”
举例 输出 1-10
DROP PROCEDURE IF EXISTS testdefine;
DELIMITER //
CREATE PROCEDURE testdefine()
BEGIN
SET @i=0;
SET @result='';
loc: LOOP
IF(@i=10) THEN
LEAVE loc;
ELSE
SET @i=@i+1;
SET @result=CONCAT(@result,' ',@i);
ITERATE loc;
END IF;
END LOOP;
SELECT @result;
END
//
2>repeat循环
循环的定义:
[begin_label:] REPEAT
statement_list
/**直到满足条件后就退出**/
UNTIL search_condition
END REPEAT [end_label]
举例 循环输出1-10
DELIMITER //
CREATE PROCEDURE testdefine()
BEGIN
SET @i=0;
SET @result='';
REPEAT
SET @i=@i+1;
SET @result=CONCAT(@result,' ',@i);
/**知道满足条件后就退出**/
UNTIL @i=10
END REPEAT;
SELECT @result;
END
//
3while循环
循环的定义:
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
举例 循环输出1-10
DELIMITER //
CREATE PROCEDURE testdefine()
BEGIN
SET @i=0;
SET @result='';
WHILE(@i<10) DO
SET @i=@i+1;
SET @result=CONCAT(@result,' ',@i);
END WHILE;
SELECT @result;
END
//