完成特点功能的sql语句的集合。把定义好的sql集合在一个特定的sql的函数当中
每次执行调用函数即可,还可以实现传参的调用
delimiter $$ #delimiter 开始和结束的语法,$$标志位,可以自定义,不要用汉字,也不要数字开头,不能使用特殊字符开头。 create procedure test1 () begin select * from info1; end $$ delimiter; show procedure status where db='xy102'; #查看xy102库中的存储过程 show procedure status like '%test1%'; #%test1%存储过程的名称 call test1;
执行速度比sql语句执行速度更快,执行效率也更高
客户端可以随时调用发放,也可以随后修改
可以对数据库做任何操作。
IN 传入参数,调用者向存储过程传入值 out 输出参数 存储过程向调用者传出值 可以是多个值 inout 输入输出,既可以表示存储过程向调用者传出,也可以表示用户向存储过程传入值。
delimiter $$ create procedure test2 (in uname char(20)) begin select * from info1 where name = uname; end $$ delimiter; call test2('user');
传出参数
delimiter $$ create procedure test4 (out num int) BEGIN set num=100; end $$ delimiter; call test4(@num) select @num; CREATE TABLE info2 (id int(4)); insert into info2 value(@num);
输入和输出参数:
in #输入 out #输出 inout #输入输出
delimiter $$ create procedure test9 (inout str varchar(10)) BEGIN select str; #在存储过程当中引用变量无需加@ set str=concat(str); #替换,把字符进行替换 select str; end $$ delimiter; set @str='蔡依林'; call test13(@str); UPDATE info1 set high=@str where id = 3;
存储过程的控制语句:
delimiter $$ create procedure test1 (inout num int) BEGIN if num >= 10 THEN set num=num-5; else set num=num*2; end if; end $$ delimiter; set @num=19; call test1(@num); UPDATE info1 set id=@num where high=195;
delimiter $$ create procedure test2 (inout score int,out grade varchar(255)) BEGIN if score between 85 and 100 THEN set grade='优秀'; elseif score between 60 and 84 THEN set grade='及格'; ELSE set grade='不及格'; end if; end $$ delimiter; set @score=92; call test2(@score,@grade);mysql INSERT into info3 VALUE(1,@score,@grade);
while: delimiter $$ create procedure test4 (inout result INT) BEGIN declare a int; declare i int; set a=result; set i=1; while i<=10 DO set a=a+10; set i=i+1; end while; set result = a; end $$ delimiter; set @result=110; call test4(@result); select @result;
上一篇:MySQL流量分析