mysql存储过程

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

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

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

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

创一个库

在库里创一个表

create table info (
id int (4) primary key,
name varchar (15),
score decimal(5,2),
pass varchar(12)
);

创建存储过程

delimiter $$
create procedure proc ()
BEGIN
select * from info;
end $$
delimiter;
​
delimiter $$
-- 将语句的结束符号从分号,临时改变两个$$
create procedure proc ()
-- 创建存储过程proc不能重复,在当前库中唯一 ()里面不定义任何方法
begin 
-- 过程体开始的关键字
select * from info;
begin 
-- 后面跟上的是需要执行sql语句
end $$
-- 整个语句结束,和上面的定义开始符号一一对应
delimiter;
-- 将结束语句的分号恢复
​
delimiter的作用保证整个存储过程的中的sql语句能够被完整的执行
​

查询存储 show procedure status where db='xiaokai'; show procedure status like '%proc%';

查看存储内容 call proc;

删除存储 drop procedure if exists test7;

存储过程中参数有三种运用的方式 1、in输入参数,调用者向存储过程传入值 2、out 输出参数,表示存储过向调用者传入值(可以返回多个值) 3、inout:表示调用者向存储过程传入值,存储过程对传入值可能进行额外的操作之后,返回给调用者

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;
​
call test1 ('小布');
​
​

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

传出参数:

delimiter $$
create procedure test2 (out num int)
begin
set num = 100;
end $$
delimiter;
​
call test2(@num);
​
insert into info values(2,'小刘',@num,'是');

输入参数和输出参数

delimiter $$
create procedure test3 (inout str varchar(10))
BEGIN
select str; -- 显示输入的字符
set str = concat(str,'_xiao'); -- 让传入的字符串做一个拼接
select str; -- 加工之后字符串
end $$
delimiter;
​
set @str='小神';
call test3(@str)
update info set name=@str where id =1 ;
​
in:先传入,定义变量的值,初始值
call test3 调用存储过程,把变量的值
@str=小神_xiao
​

存储过程中的控制语句

if else
​
delimiter $$
create procedure test6 (inout num int)
BEGIN
if num >= 10 THEN
set num=num-6;
ELSE
set num=num*2;
end if;
-- 结束if语句的判断
set num =num;
end $$
delimiter;
​
set @num=5;
call test6(@num)
update info set id = @num where score=100;
​

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

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=55;
call test7(@score,@grade);
​
update info set score=@score,pass=@grade where id =10;
​

while 循环语句:

delimiter $$
create procedure test8 (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 $$
delimiter;
​
set @result=90;
call test8(@result)
select @result;

注意点 使用存储过程中,在内部变量不需要加@,外部使用和复制要加@,引用变量 在存储过程begin之后声明变量:declare a INT; declare i int;声明变量要加数据类型 要想使用存储里面的结果,必须要out才能传出参数,再声明存储变量是,要定义好参数的传参方式in out inout

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值