mysql 存储过程

存储过程:

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

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

复杂的,需要很多sql语句联合执行的任务。

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

创建存储过程:

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

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

BEGIN                 -- 过程体开始的关键字,begin后跟的是需要执行sql语句。

select * from info;

END $$                 -- 整个语句结束,和上面的对应开始符号一一对应

delimiter;                 -- 将结束语句的符号恢复。

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

调用:

        show procedure status where db='kgc';

        show procedure status like '%proc%'

call proc; 查询

drop procedure if exists proc; 删除

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

1,in 输入参数,调用者向从过程传入值

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

3,inout:表示调用者向存储过程传入值,存储过程对传入值可能进行额外的操作之后,返回给调用者。

1,in:传入参数

delimiter $$

create PROCEDURE test1 (in uname char(20) )

BEGIN

select * from info where name =uname;

select * from info;

update info set name = '王浩' where name=uname;

END $$

delimiter;

drop procedure if exists test1;

call test1('cc1')

数据清洗和指定数据入库。分析用户行为。

mysql 存储过程_第1张图片

2 ,out:传出参数

delimiter $$

CREATE PROCEDURE test2 (out num int)

BEGIN

set num =100;

end $$

delimiter;

drop procedure if exists test2;

call test2(@num);

insert into info values(2,'gq',@num,'s')

mysql 存储过程_第2张图片

3,输入参数和输出参数:

delimiter $$

CREATE PROCEDURE test3 (inout str varchar(10))

BEGIN

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

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

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

end $$

delimiter;

set @str='刘亚伟';

call test3(@str)

update info set name=@str where id = 1;

mysql 存储过程_第3张图片

存储过程中的控制语句:

if ELSE

delimiter $$

create PROCEDURE test4 (inout num int)

BEGIN

if num >= 10 THEN

set num=num-6;

ELSE

set num=num*2;

end if;

-- 结束if语句的判断。

select num =num;

end $$

delimiter;

要用inout传入和传出

drop procedure if exists test4;

set @num=19;

call test4(@num)

UPDATE info set id = @num where score =100;

mysql 存储过程_第4张图片

调用多个参数:范围的方式匹配,完成传参-----写入表中

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;

mysql 存储过程_第5张图片

where循环语句:

delimiter $$

CREATE PROCEDURE test8 (out result int)

begin

DECLARE a int;

DECLARE i int;

set a=10;

set i=1;

while i

set a=a+10;

set i=i+1;

end while;

set result = a;

end $$

delimiter;

set @result=100;

call test8(@result)

select @result

注意点:使用存储过程中,在内部不需要加@,外部使用和复制要加@,引用变量

在存储过程begin之后声明变量:declare a int; declare i int; 声明变量要加数据类型。

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

mysql 存储过程_第6张图片

你可能感兴趣的:(mysql,数据库)