zoukankan      html  css  js  c++  java
  • Mysql——存储过程

    我的理解

    存储过程就是 可能是DBA给你写好的一组SQL的集合

    比如你代码要执行3条SQL

    第一次查询返回结果A

    第二次利用A查询返回结果B

    第三次利用B查询返回结果C

    这样你就进行了三次的SQL查询 效率是比较低的

    多以利用存储过程就是把这些SQL封装成一个函数 然后你传入参数直接调用即可 这样也可以提高效率,但是一般现在公司用的比较少 大公司的话 有专门写存储过程的DBA

    【1】什么是存储过程(Stored Procedure)

    通过前面章节的学习,我们已经知道SQL是一种非常便利的语言。从数据库抽取数据,或者对特定的数据集中更新时,都能通过简洁直观的代码实现。

    但是这个所谓的“简洁”也是有限制,SQL基本是一个命令实现一个处理,是所谓的非程序语言。

    在不能编写流程的情况下,所有的处理只能通过一个个命令来实现。当然,通过使用连接及子查询,即使使用SQL的单一命令也能实现一些高级的处理,但是,其局限性是显而易见的。例如,在SQL中就很难实现针对不同条件进行不同的处理以及循环等功能。

    这个时候就出现了存储过程这个概念,简单地说,存储过程就是数据库中保存(Stored)的一系列SQL命令(Procedure)的集合。也可以将其看作相互之间有关系的SQL命令组织在一起形成的一个小程序。

    【2】存储过程的优点

    1) 提高执行性能。存储过程执行效率之所高,在于普通的SQL语句,每次都会对语法分析,编译,执行,而存储过程只是在第一次执行语法分析,编译,执行,以后都是对结果进行调用。

    2) 可减轻网络负担。使用存储过程,复杂的数据库操作也可以在数据库服务器中完成。只需要从客户端(或应用程序)传递给数据库必要的参数就行,比起需要多次传递SQL命令本身,这大大减轻了网络负担。
    3) 可将数据库的处理黑匣子化。应用程序中完全不用考虑存储过程的内部详细处理,只需要知道调用哪个存储过程就可以了

    【3】展示存储过程:

    -- 定义一个没有返回值 存储过程
    -- 实现:模糊查询操作:
    select * from emp where ename like '%A%';
    create procedure mypro01(name varchar(10))
    begin
            if name is null or name = "" then
                    select * from emp;
            else
        select * from emp where ename like concat('%',name,'%');
            end if;    
    end;
    -- 删除存储过程:
    drop procedure mypro01;
    -- 调用存储过程:
    call mypro01(null);
    call mypro01('R');
    -- 定义一个  有返回值的存储过程:
    -- 实现:模糊查询操作:
    -- in 参数前面的in可以省略不写
    -- found_rows()mysql中定义的一个函数,作用返回查询结果的条数
    create procedure mypro02(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,'%');
            end if;    
            select found_rows() into num;
    end;
    -- -- 调用存储过程:
    call mypro02(null,@num);
    select @num;
    call mypro02('R',@aaa);
    select @aaa;
    存储过程优点
    1. 第一点优势就是执行速度快。因为我们的每个 SQL 语句都需要经 过编译,然后再运行,但是存储过程都是直接编译好了之后,直接 运行即可。
    2. 第二点优势就是减少网络流量。我们传输一个存储过程比我们传 输大量的 SQL 语句的开销要小得多。
    3. 第三点优势就是提高系统安全性。因为存储过程可以使用权限控 制,而且参数化的存储过程可以有效地防止 SQL 注入攻击。保证了 其安全性。
    4. 第四点优势就是耦合性降低。当我们的表结构发生了调整或变动 之后,我们可以修改相应的存储过程,我们的应用程序在一定程度 上需要改动的地方就较小了。 44 / 123
    5. 第五点优势就是重用性强。因为我们写好一个存储过程之后,再 次调用它只需要一个名称即可,也就是”一次编写,随处调用”,而且 使用存储过程也可以让程序的模块化加强。
    存储过程的缺点
    1. 第一个缺点就是移植性差。因为存储过程是和数据库绑定的,如 果我们要更换数据库之类的操作,可能很多地方需要改动。
    2. 第二个缺点就是修改不方便。因为对于存储过程而言,我们并不 能特别有效的调试,它的一些 bug 可能发现的更晚一些,增加了应 用的危险性。
    3. 第三个缺点就是优势不明显和赘余功能。对于小型 web 应用来说, 如果我们使用语句缓存,发现编译 SQL 的开销并不大,但是使用存 储过程却需要检查权限一类的开销,这些赘余功能也会在一定程度 上拖累性能
    注重细节——关注底层——注重细节——关注底层——注重细节——关注底层——注重细节——关注底层——注重细节——关注底层
  • 相关阅读:
    014-CallbackServlet代码
    PaymentServlet代码
    013-PaymentUtils工具类模板
    案例30-在线支付
    案例29-购物车提交订单
    案例28-清空购物车
    案例27-购物车删除单一商品
    案例26-购物车
    案例25-servlet的抽取
    在Eclipse或工作空间中 ,复制或修改项目后,把项目部署后发现还是原来的项目名称
  • 原文地址:https://www.cnblogs.com/PJG20/p/13291214.html
Copyright © 2011-2022 走看看