mysql数据库存储过程和存储函数

武林秘籍之存储过程和函数

简介:大家好,我是醉心于武术的功夫小白,今天我在扔垃圾的时候,意外发现垃圾桶旁边躺着一本不起眼的书籍,心里却泛起一种莫名的躁动,像是受到某种神秘力量的召唤,眼看四下无人一把塞进怀里跑回家。透过门上的猫眼确定没人尾随后,我颤颤巍巍地从怀里摸出那本被捂得有点烫手的书籍,泛黄残缺的封面在昏暗的灯光下有种天书古卷的味道。我的手不禁颤抖了起来,封面越破记载的功夫越厉害,在电视里长这样的怎么也得是名震天下的武林秘籍,而我必然是头顶光环准备逆袭的废柴主角。我压抑着狂乱的心跳翻开了第一页,一道道浅浅的金光从书中射出,书上赫然写着一行金色字体——《Mysql之存储过程和函数篇》。竟然是冠绝天下,多年前却突然在江湖销声匿迹只留下无数传说的《Mysql宝典》,我迫不及待地继续往下翻,只要学会了我将会是江湖的下一个传说。

一、宝典介绍

这招威震武林的杀招— —存储过程,他厉害之处是并不拘泥于固定的招式,可以灵活地将各种招式组合成一个连招来达到意想不到的效果,减少与敌人交手的次数,一招制敌是最高效安全的,减少程序与数据库的交互次数也是如此。

二、宝典第一式— —安装数据库

要想成功,必先自— —行安装Mysql

三、宝典第二式— —查看存储过程

在学习存储过程之前,先来了解如何运功查看自己身上有没有学过这招存储过程,便于以后自己可以查看是否已经学会,也就是看看存储过程有没有创建成功,还是解释一下,毕竟像我一样天资聪颖的奇才也不多;

  • 查看数据库的存储过程的命令:
--第一招,如图一
show procedure status where db='数据库名称';
--可以在后面添加“\G”显示详情,如图二
show procedure status where db='数据库名称'\G;
--第二招
select routine_name from information_schema.routines where routine_schema='数据库名称';
--第三招
select name from mysql.proc where db='数据库名称';

图一:
在这里插入图片描述
图二:
在这里插入图片描述

四、宝典第三式— —创建存储过程

到了我最关心的环节了,开始学习如何创建属于自己的必杀技— —存储过程。开始创建存储过程之前我们要热热身,做些准备工作。
因为存储过程是由多行语句组成的,避免使用分号“;”分隔符时系统判定我们为结束编辑,我们可以先执行“delimiter $”指令修改结束符为“ $ "符,也可以是别的,你喜欢就好,不喜欢就别勉强,强扭的符号不甜。你偏要犟就是不改别人也拿你没办法,但这就是天堂有路你不… …

1、简单的存储过程的创建和调用
-- 因为存储过程是由多行语句组成的,避免使用分号“;”分隔符时系统判定我们为结束编辑,我们得先修改结束符
delimiter $
--创建简单存储过程
create procedure a()
     begin
     select ("第一个存储过程");
     select ("第一招,亢龙有悔");
     select ("第二招,万佛朝宗");
     end$
--调用存储过程
     call a()$

如图:
在这里插入图片描述

2、带变量的存储过程的创建和调用以及两种赋值方式

定义变量:

  • 通过declare variableName variableType default value 定义变量,使用default给变量设置默认值

存储过程变量的两种赋值方式:

  • 通过set给变量赋值
  • 通过select …into …给变量赋值
--创建带变量的存储过程
create procedure b()
     begin
     declare num int default 5;
     set num=num+5;
     select concat('通过set方法为变量赋值为:',num);
     select count(*) into num from t_account;
     select concat('通过select...into...方法为变量赋值',num);
     end$
--调用函数
     call b()$

如图
带变量的存储过程

3、带参数的存储过程的创建和调用

存储过程有三种参数格式:in、out、inout

  • in:往存储过程传入数据,参数类型可以为常量和变量;
  • out:存储过程向外传出数据,参数类型只能为变量;
  • inout:表示既往存储函数传入参数,存储函数又向外传出数据,参数类型只能为变量;
(1)in类型参数的使用实例,可传入常量和变量,存储过程函数体只有一句的时候可以省略begin和end
--创建带in类型参数的存储过程
create procedure c(in num int,in name varchar(50))
  begin
  SELECT concat("我!",name,",要打",num,"个!");
  end$
-- 设置会话变量
 set @name='叶问'$
-- 调用存储过程,可传入常量和变量
call c(10,@name)$

图一:
在这里插入图片描述

(2)out类型参数的使用实例,只能传入变量,否则会报错
--创建带out类型的存储过程
create procedure d(out text varchar(100),out num int)
 begin
set num=10;
select concat('我!叶问,要打',num,'个!') into text;
 end$
 --调用存储过程
  call d(@a,@b)$
 --查看传出的参数
 select @a,@b$

如图:
在这里插入图片描述

(3)inout类型参数的使用实例,只能传入变量
-- 创建带inout类型参数的存储过程
 create procedure e(inout name varchar(100),inout num int)
  begin
  select concat('我!',name,',也要打',num,'个!');
  set name="张三";
  set num=9;
  end$
--设置要传入的变量值
 set @a='叶问',@b=10$
--调用存储过程
call e(@a,@b)$
--查看存储过程传出的值
 select @a,@b$

如图:
在这里插入图片描述

还没写完。。。。。。。。点赞评论鼓励一下新人小白哇!大家一起学习

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讨厌令狐冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值