数据库中的存储过程

之前介绍了

接下来介绍最后一个存储过程。当然,数据库中的东西还有很多,但是到此位置,基本常用的都已经介绍完了,还有就是进阶的查询等操作了,特别是数据库中一些函数的使用,例如查询出来的内容,根据字符拆封等等,但是这些太多太杂,目前还没有完整整理。

存储过程(stored procedure):主要是为了解决多次访问数据库(因为每次得到结果都需要进行一些逻辑操作)。而存储过程就是将这些逻辑操作直接写在数据库内部,这样就只需要一次访问数据库就可以得到最终想要的结果。其实可以使用子查询解决一定的问题,但遇到较复杂的逻辑处理(例如需要加for循环等),子查询就不太好实现。存储过程类似与一段小程序,或者一个方法,一般会有专业的人去写,java程序员一般只是调用。
存储过程优点:

  • 提高执行的性能:因为普通的sql每次都会语法分析、编译、执行,而存储过程只在第一次执行的时候进行语法分析、编译和执行。
  • 减轻了网络负担:因为降低了客户端(navicat等)与数据库交互的频率。
  • 将数据库的处理黑匣子化:应用程序不需要考虑存储过程的内部处理,因为封装成了一个方法。

创建存储过程:其实存储过程就是定义一个函数,具体格式为create procedure 存储过程名称(in 形参名 形参类型(长度)…, out 返回值 返回值类型(长度)) begin …end;,在begin和end之间写一些逻辑。并且in可以省略不写。

  • 例如,实现emp表中ename的模糊查询,传入的内容为模糊查询的模糊部分,类型为varchar,长度为10,形参名定义为name。(没有返回值)

    create procedure myProcedure(in name varchar(10))
    begin
        if name is null or name = "" then
            select * from emp;
        else
            select * from emp where ename like concat('%',name,'%');# 这里字符串拼接需要用到concat函数
        end if;
    end;
    
  • 例如,实现emp表中ename的模糊查询,传入的内容为模糊查询的模糊部分,类型为varchar,长度为10,形参名定义为name,并返回查询的记录数。

    create procedure myProcedure1(in name varchar(10),out num int(3))
    begin
        if name is null or name = "" then
            select * from emp;
        else
            select * from emp where ename like concat('%',name,'%');# 这里字符串拼接需要用到concat函数
        end if;
        select found_rows() into num;# found_rows是mysql中定义的专门用来查看返回行数的函数。
    end;
    

删除存储过程:drop procedure 存储过程名称。

调用存储过程:call 存储过程名称(参数);这时候是没有返回值的调用;call 存储过程名称(参数, @接收返回值的变量);这个是有返回值的时候的调用。并且需要注意的是,返回值的查看需要再执行select @接收返回值的变量;才可以获取。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值