数据库(1.4 day 4)

一.存储过程

一.存储过程

        将能够完成特定功能的SQL指令进行封装,编译之后存储在数据库服务器上,并且为之取一个名字;

        当客户端需要执行这个功能时,不用编写SQL指令,直接通过封装的SQL指令的名字完成调用即可;

        存储过程优点:

                1.SQL指令无需客户端编写,通过网络传送,可以节省网络开销,同时避免SQL指令在网络传输过程中被恶意篡改,保证安全性;

                2.存储过程经过编译创建并保存在数据库中,执行过程无需重复的进行编译操作,对SQL指令的执行过程进行了性能提升;

                3.存储过程中多个SQL指令之间存在逻辑关系,支持流程控制语句(分支、循环),可以实现更为复杂的业务;

        存储过程缺点:

                1.存储过程是根据不同的数据库进行编译、创建并存储在数据库中,当我们需要切换到其他的数据库产品时,需要重新编写针对于新数据库的存储过程;

                2.存储过程受限于数据库产品,如果需要高性能的优化会成为一个问题;

                3.在互联网项目中,如果需要数据库的高(连接)并发访问,使用存储过程会增加数据库的连接执行时间;

        语法:create procedure <proc_name>( [ IN / OUT args ] )

                begin

                        --SQL

                end;

        例:创建一个存储过程实现加法运算

                create procedure pro_test1( IN a int , IN b int , OUT c int )

                begin

                        SET  c=a+b;

                end;

        调用存储过程:

                set  @m=0;   //定义变量@m

                call proc_test1(3,2,@m);   //调用存储过程

                select @m from dual;  //显示变量值

存储过程中变量的使用

        局部变量:定义在存储过程中的变量,只能在存储过程内部使用

                        declare <attr_name> <type> [default value];

                        例:declare x int default 0;  ——定义x int类型,默认值为0

        用户变量:相当于全局变量,定义的用户可以通过select @attrName from dual进行查询

                ——用户变量会存储在mysql数据库的数据字典中(dual)

                ——用户变量定义使用set关键字直接定义,变量名要以@开头

分支语句 if-then-else

        单分支:if condition then

                        --SQL

                       end if;

        双分支:if condition then

                        --SQL1

                       else

                         --SQL2       

                       end if;

分支语句case

        case a

        when 1 then

                --SQL1

        when 2 then

                --SQL2

        else

                --SQL

        end case;

循环语句

        while ... do SQL end while;

        repeat SQL until ... end repeat;

        Nameloop:loop SQL ... leave Nameloop; end loop;

游标           

        用来依次取出查询结果集中的每一条数据——逐条读取查询结果集中的记录

        声明游标:

                DECLARE cursor_name CURSOR FOR select_statement;     

        打开游标:

                open cursor_name;

        使用游标:提取游标当前指向的记录(与循环一起使用,提取后,游标自动下移)

                FETCH cursor_name INTO column1,column2...;

        关闭游标:

                close cursor_name;

                

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值