广州37期_罗子鹏 发表于 2021-12-20 21:56:26

第十三天笔记

mysql中的存储过程 procedure
------------------------------------------------------------------------------
创建过程:
create procedure dcs37()#创建存储过程 命名为dcs37
begin#开始
#存储过程的函数体==》SQL语句集合,里面每条SQL语句都是单独的

end;#结束
---------------------------------------------------------------------------------
调用过程:
call dcs37();#调用对应的存储过程
dcs37 每次调用存储过程是,都会执行一次存储过程里面的函数体(SQL语句的集合)
--------------------------------------------------------------------
if 语句单分支(多少if,就有多少个end if)
if n=0 then
select count(*) from mm;
else
select max(score) from mm;
end if;
在过程end;结束前加上
--------------------------------------------------------------------
declare i int default (select count(*) from mm);
定义变量i,类型为int,默认值为 统计mm表的行数
定义变量语句必须要写在SQL集合的最前面
--------------------------------------------------------------------
例如:
drop procedure if exists dcs37;
create procedure dcs37(n int)
begin
declare i int default (select count(*) from mm);
declare j varchar(20) default ' ';
drop table if exists mm;
create table mm(id int(4) primary key auto_increment,score int(4));
insert into mm values(1,99),(2,98);
insert into mm values(3,96),(4,95);
insert into mm values(5,88),(6,91);
insert into mm values(7,95),(8,93);
insert into mm values(9,95),(10,93);
-- select * from mm;
-- select * from mm where id=1;
-- select * from mm where id=n;
-- desc mm;
-- if n=0 then
-- select count(*) from mm;
-- else
-- selectmax(score) from mm;
-- end if;
if n=0 then
select count(*) from mm;
else if n>0 && n<i then
select * from mm where id=n;
else if n>i then
select max(score) from mm;
else
select * from mm;
end if;
end if;
end if;
end;
--
call dcs37(10);


#n为实际参数,因前增加形式参数,所以调用时也需增加实际参数
当传入实际参数时,这个实际参数就会传递给形式参数,给对应位置的SQL语句执行

如果直接执行创建存储过程的语句,会报错,存储过程已经存在
所以就加上了判断存储过程是否存在的语句,用于增加程序的健壮性

在存储过程里面增加drop table if exists...也是为了增加存储过程的程序健壮性

当每一次调用存储过程时,就会由上往下的执行存储过程里面begin》end里面的SQL语句


页: [1]
查看完整版本: 第十三天笔记