1.存储过程的增删查
create procedure p1() begin select count(*) from students; end; call p1(); --查看 select * from information_schema.ROUTINES where ROUTINE_SCHEMA ='student' --查询 数据库student 中存在的存储过程 --删除p1 DROP PROCEDURE IF EXISTS p1
注意:如果在命令行中,需要通过 delimiter 指定SQL语句 结束符
2.系统变量的设置
-- 查看会话变量 SHOW SESSION variables ; -- 设置系统变量 -- 设置会话级别系统变量 SET SESSION autocommit =0; -- 设置全局系统变量 SET GLOBALautocommit = 0;
3.用户自定义变量的设置
-- 用户自定义变量 set @myname = 'itcast'; -- 可以使用 = 号 也可以使用 := set @myage = 10; set @mygender = '男', @myhobby = 'vue'; -- 使用变量 select @myname,@myage,@mygender,@myhobby; -- 将tb_user 的查询结果赋值给 @mycount select count(*) into @mycount from tb_user
注意:用户定义的变量无需声明或初始化,只不过获取到的值为NULL
3.局部变量的定义
-- 变量:局部变量 -- 声明-declare -- 赋值 - create procedure p2() begin declare stu_count int default 0; select count(*) into stu_count from students; select stu_count; end; drop procedure p2 call p2()
4.IF判断
-- 根据定义的分数score变量,判定当前分数对应的分数等级, -- 1.score >=85分,等级为优秀, -- 等级为及格。2.score>=60分目score<85分, -- 3.score<60分,等级为不及格。 create PROCEDURE p3() BEGIN -- 创建一个成绩变量 DECLARE score int DEFAULT 58; DECLARE RESULT varchar(10); IF score >= 85 THEN SET RESULT := '优秀'; ELSEIF score >= 60 AND score <= 85 THEN SET RESULT := '及格'; ELSE SET RESULT:= '不及格'; END IF; -- --打印结果 SELECT RESULT; END; -- 执行存储过程 CALL p3()
5.参数(IN、OUT、INOUT)
类型 | 含义 | 备注 |
IN | 该类参数作为输入,也就是需要调用时传入值 | 默认 |
OUT | 该类参数作为输出,也就是该参数可以作为返回值 | |
INOUT | 既可以作为输入参数,也可以作为输出参数 |
CREATE 存储过程名称([ IN/OUT/INOUT 参数名 参数类型 ]) BEGIN -- SQL语句 END ; -- 传入score参数,返回result结果 CREATE PROCEDURE p4(IN score int,OUT RESULT varchar(10)) BEGIN -- 创建一个成绩变量 IF score >= 85 THEN SET RESULT := '优秀'; ELSEIF score >= 60 AND score <= 85 THEN SET RESULT := '及格'; ELSE SET RESULT:= '不及格'; END IF; END -- 通过@result接受用户自定义变量 CALL p4(19,@result); SELECT @result -- 将传入的200分制的分数进行转换,换算成百分制,然后返回分数--->INOUT CREATE PROCEDURE p5(INOUT score double) BEGIN SET score := score * 0.5; END;
5.CASE
CREATE PROCEDURE p6(IN month int )
BEGIN
-- 定义一个变量
DECLARE RESULT varchar(10);
CASE
WHEN month >=1 AND MONTH <=3 THEN
SET RESULT := '第一季度';
WHEN month >=4 AND MONTH<=6 THEN
SET RESULT := '第二季度';
WHEN month >=7 AND MONTH<=9 THEN
SET RESULT := '第三一季度';
WHEN month >=10 AND MONTH<=12 THEN
SET RESULT := '第四一季度';
ELSE
SET RESULT := '非法参数';
END case;
SELECT concat('输入的月份为:',month,'所属的季度是',RESULT);
END;
--执行并非传入一个值
CALL p6(2)
6.WHILE
-- 计算从1累加到n的值,n为传入的参数值。 CREATE PROCEDURE p7(IN num int) BEGIN --创建变量 DECLARE total int DEFAULT 0; WHILE num>0 do SET total := total +num; --每循环一次将变量的值减一,直到变量为0退出循环 SET num := num-1; END WHILE; SELECT total; END; CALL p7(3)