Mysql的存储过程

Mysql的存储过程:

是一组为了完成特定功能的sql语句的集合,类似于函数

写好了一个存储过程之后,我们可以像函数一样随时调用sql语句

主要用在,复杂的,需要很多sql语句联合执行完成的任务

存储过程在执行上比sql语句执行速度要快,效率也更高

创建存储过程:

delimiter $$   将语句的结束符号从分号,临时改变两个$$

create procedure proc ()  创建存储过程,proc不能重复,在当前库中唯一,()里面不定义任何方法

BEGIN  过程体开始的关键字

select * from info2;  begin后面更上的是需要执行的sql语句

end $$ 表示整个语句结束,和上面的定义开始符号一一对应

delimiter; 将结束语句的分号恢复

Delimiter作用保证整个存储过程中的sql语句能够被完整执行

delimiter $$

create procedure proc ()

BEGIN

select * from info2;

end $$

delimiter;

查看存储过程

show procedure status where db='wang';

show procedure status like '%proc%';

看表

call proc;

删除存储过程

drop procedure if exists proc;

存储过程中参数有三种运用方式:

  1. in 输入参数,调用者向存储过程传入值
  2. Out 输出参数,表示存储过程向调用者传出值(可以返回多个值)
  3. INOUT表示调用者向存储过程传入值,存储过程对传入值可能进行额外的操作,返回给调用者

In方式:

delimiter $$

create procedure test1 (in uname char(20) )

begin

select * from info where name = uname;

select * from info;

end $$

delimiter;

传参:

call test1('刘备');

补充:

添加一个新的语句

In这种方式,主要用于数据清洗和执行数据入库,分析用户行为

Out方式:

Out 输出参数,表示存储过程向调用者传出值(可以返回多个值)

delimiter $$

create PROCEDURE test2 (out num int)

BEGIN

set num = 100;

end $$

delimiter;

已插入

(inout)输入和输出参数:

INOUT表示调用者向存储过程传入值,存储过程对传入值可能进行额外的操作,返回给调用者

delimiter $$

create PROCEDURE test3 (inout str varchar(10)) --一定要更上字符类型

BEGIN

select str;  --显示输入的字符

set str = concat(str, '_三国');  --让传入的字符串做一个拼接

select str;  --加工之后字符串

end $$

Delimiter;

set @str='关羽'; --传参

call test3(@str)  --调用

update info set name=@str where id = 1; --把结果调用

In:先传入,定义变量的值,初始值

Call test3: 调用存储过程,把变量的值传入存储过程

最后得到结果

存储过程中的控制语句:

语法:

delimiter $$

create procedure test4(inout num int)

BEGIN

if num >=10 THEN

set num=num-10;

ELSE

set num=num*2;

end if; --结束符,结束if条件语句

set num=num;

end $$ --结束整合存储过程的语句

delimiter;

set @num=19;

call test5(@num);

update info set id = @num where score =99;

调用多个参数:范围的方式匹配,完成传参-----写入表中:注意红色语法部分

delimiter $$

create PROCEDURE test7 (inout score int, out grade VARCHAR(15))

BEGIN

    if score BETWEEN 85 and 100 THEN

       set grade = '优秀';

    elseif score between 60 and 84 THEN

       set grade = '一般';

    ELSE

       set grade = '不及格';

    end if;

    select grade;

end $$

delimiter;

set @score=90;

call test7(@score,@grade);

update info set score=@score,pass=@grade where id = 1;

while循环语句:

delimiter $$

create PROCEDURE test6 (out result int)

BEGIN

declare a int;

declare i int;

set a=10;

set i=1;

while i<=10 DO

set a=a+10;

set i=i+1;

end while;

set result = a;

end $$

delimter;

set @result=110;

call test6(@result)

select @result

注意点:使用存储过程中,在内部变量不需要加0,外部使用和复制要0,引用变量在存储过程中begin之后声明变量:delete a int; declare i int;  声明变量要加数据类型。

要想使用存储过程里面的结果,必须要out才能传出出参数,在声明存储变量是,要定义好传参的传参方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值