链接: 学习视频
存储过程
介绍
特点
创建
delimiter $$
create procedure p1()
begin
select * from spj;
end;
$$
命令行和workbench中要加
delimiter $$
$$
调用
call p1();
查看
select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_SCHEMA = 'XXX';
show create procedure p2();
删除
drop procedure if exists p2;
变量
系统变量
- 查看系统变量
show variables;
show session variables like 'auto%';
select @@auto_generate_certs;
- 设置系统变量
set 系统变量名 = 值;
set @@系统变量名 = 值;
用户定义变量
- 赋值
set @变量名 = 值;
set @变量名 := 值;
set @变量名 = 值,@变量名 = 值;
select @变量名 := 值;
#将查询到的结果赋值给变量
#例:
select count(*) into @变量名 from 表名;
- 使用
select @变量名;
select @变量名,@变量名;
局部变量
#在begin end块内声明和使用
#变量类型就是数据库的字段类型
declare 变量名 变量类型
#对局部变量的赋值
#其实和对用户自定义变量赋值是差不多的
set @变量名 = 值;
set @变量名 := 值;
if判断
#总的来说很简单。
if 条件1 then
...
elseif 条件2 then
...
elseif 条件3 then
else
...
end if;
参数
#这东西应该也很简单吧
#在创建中-------------------
create procedure 存储过程名称(in/out/inout 参数名 参数类型,in/out/inout 参数名 参数类型)
begin
--sql语句
end;
#使用中----------------------------
#值可以是用户自定义变量名-----------
call 存储过程名称(参数名: 值,参数名: 值);
case
#学过某一语言的应该看一眼就会了
case 某值
when 值1 then 代码块
when 值2 then 代码块
else 代码块
end case;
---------------------------------
case
when 条件表达式1 then 代码块
when 条件表达式2 then 代码块
else 代码块
end case;
循环
while
#这个也很简单,看一眼就会
while 条件 do
代码块
end while;
repeat
#这个也很简单---------
repeat
代码块
until 条件
end repeat;
loop
#也简单-------------------------
标记名: loop
代码块
end loop 标记名;
#这部分相当于break;continue;
leave label; #退出循环
iterate label; #进入下一次循环
游标
- 应对于接收结果集,这就是游标的作用。
- 游标其实是数据类型
#声明游标-------------
declare 游标名称 cursor for 查询语句;
#打开游标----------------
open 游标名称;
#获取游标记录-----------
fetch 游标名称 into 变量;#要在循环内用。
#关闭游标----------
close 游标名称;
注意:
- 游标声明应在变量声明后面。
- while true是死循环,后面会用条件处理程序解决。
条件处理程序
#声明----------------------
declare handler_action handler for condition_value 代码块;
#handler_action--------------
continue#继续
exit #终止
#condition_value
SQLSTATE sqlstate_value #状态码
SQLWARNING #01开头,SQLSTATE代码简写
NOT FOUND #02开头,SQLSTATE代码简写
SQLEXCEPTION #未被01,02捕获的SQLSTATE代码简写
在报错后会自动进入游标判别,然后退出.