存储过程
存储过程的作用:所谓的存储过程,就是一组用于完成特定数据库功能的SQL语句集,该SQL语句经过编译后存储在数据库系统中,在使用的时候,用户通过调用指定已经定义好的存储过程并执行它,从而完成一系列的数据库操纵
个人理解:这学期有30本书,你每次上学放学都用手捧着不方便,所以你买了个书包,把书全部放进书包里,等你想看语文书的时候,你就从书包里面"拿"出来,等一下,这里的"拿"就是存储过程的调用,而SQL语句集就等于书,这么说是不是好理解多了。
下一步:存储过程的创建和调用
语法:drop procedure if exists sss; 如果存储过程sss存在就删除
create procedure sss() 创建存储过程,并且给它起个名字叫sss
begin 开始
--声明变量(不是必要的)
--写sql语句
select * from student; 查询学生表
end;--结束
call sss(); 调用存储过程
练习的时候一定要认真反复的多敲几遍,这样才能记的牢固不会报错
什么是变量?
变量我们可以理解为一个存储空间的名称
变量声明的语法
declare 变量名 类型(长度)
变量名要求
1,只能是字母,数字,下划线
2,首字母必须是字母
3,长度不允许超过30
4,不允许使用关键字:name,or,select,and
语法:create procedure sss()
begin
declare jake varchar(20); //声明变量jake,定义数据类型,长度
set jake=''唐阿飞"; //将变量jake赋值为唐阿飞
select jake; //查询变量jake
end; //结束
call sss(); //调用存储过程
if分支语句
if(条件) then
sql或sql语句
【else if(条件) then】
可以有多个elseif
[else]
end if;
举列使用if.....else
drop procedure if exists test_d;
create procedure test_d;
declare book int(10); //定义变量book 类型为int,长度10;
set book = 600; //给变量book赋值=600;
if book>500 then //条件判断,如果变量book大于500 ,那么
select'我能月入过万'; //输出:我能月入过万
else if book>=200 then //否则如果book大于等于200,那么
select'我每月7000'; //输出:我每月7000
else //否则
select'月薪4500,包吃包住,电子厂打螺丝'; //输出:月薪4500,包吃包住住,电子厂打螺丝
end;
call test_d();
LOOP循环语句
loop循环中,我们需要自定义循环结束的条件,语法如下:
语法:loopName:loop
if 条件 THEN 满足条件时离开循环
leave loopName; //跳出循环
end if;
end loop;
举例子使用loop循环
drop procedure if exists test_e; //如果存储test_e存在则删除
create procedure test_e(); //创建test()
begin //开始
declare i int default 0; //定义一个变量i并且默认为空
loopName:loop //开始循坏,取名为loopName
select'世界你好'; //查询世界你好
set i=i+1; //i变量每次循环加1
if i >10 then //如果i大于10 那么
leave loopName; //跳出循环
end if; //结束判断
end loop; //结束循环
end; //结束
call test_e(); //调用存储test_e()
还可以利用循环批量插入数据:
如,批量插入100条数据
create procedure testq();
begin
declare a int default 0; //定义变量a 设置Int类型,默认为0
loopname:loop //开始循环,取名为loopName
insert into student(sname,sex,age)values("小红",'女',18");
set a = a+1; //设置变量a每次循环+1
if a>100 then //如果a>100 name
leave loopname; //跳出循环
end if; //结束条件判断
end loop; //结束循环
end; //结束
call testq(); //调用
select * from student; //查看数据是否成功插入student表内
查询出来的结果应是100条(小红,女,18);