1. 为什么使用存储过程?

(1) 通过把处理封装在容易使用的单元中,简化复杂操作

(2) 为了保证数据的完整性,不要求反复建立一系列的处理操作,所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码否的相同的,这一点的延申就是为了防止错误,保证数据的一致性

(3)提高性能,因为使用存储过程比使用单独的SQL语句要快

(4)存储功能可以编写功能更强更灵活的代码

  一句话,既简单、安全又高性能

2. 创建存储过程

create procedure product_price()
begin
select Avg(proc_price) as priceaverage
from products;
end;

  调用:

  call product_price()

  输出:

  

 是不是很简单,下面使用返回值创建存储过程

drop procedure product_price;
create procedure product_price(
OUT pa decimal(,)
)
begin
select Avg(proc_price) into pa
from products;
end; call product_price(@priceaverge);
select @priceaverge

  下面是参数和返回值创建存储过程

drop procedure IF EXISTS product_price;
create procedure product_price(
IN number int,
OUT sum decimal(,)
)
begin
select Sum(proc_price) into sum
from products
where vend_id = number;
end; call product_price(, @pricesum);
select @pricesum;

3. 复杂存储过程展示

  使用先前创建的orderitems表

  

  需求:

  通过order_num计算该订单号的产品总价,再根据是否交税情况返回最终价格

create procedure orderprice(
in ordernum int,
in istax boolean,
out sumprice decimal(,)
)
begin
declare taxrate int default ;
select Sum(quantity * item_price) into sumprice
from orderitems
where order_num = ordernum; if istax then
select sumprice+(sumprice*taxrate/) into sumprice;
end if;
end;

  测试:

call orderprice(,,@sumprice);
select @sumprice;

call orderprice(,,@sumprice);
select @sumprice;

4. 对于使用mysql命令行进程存储操作的补充

  由于mysql命令行使用;作为语句分隔符,如果命令行要解析存储过程的;字符,则它们最终不会成为存储过程的成分,这会使存储过程中的sql出现句法错误。

  可以采用下列方法进行解决:

DELIMITER //
create procedure product_price()
begin
select Avg(proc_price) as priceaverage
from products;
end //
DELIMITER ;

  DELIMITER // 告诉命令行实用程序使用//作为新的语句结束分隔符,最后再还原为DELIMITER ;

MySql必知必会实战练习(五)存储过程的更多相关文章

  1. MySql必知必会实战练习(二)数据检索

    在上篇博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,下面进行数据检索和过滤操作. 1. Select子句使用顺序 select--->DISTINCT---& ...

  2. MySql必知必会实战练习(三)数据过滤

    在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结. 1. whe ...

  3. mysql必知必会

    春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

  4. MySQL必知必会1-20章读书笔记

    MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...

  5. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  6. mysql学习--mysql必知必会1

     例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式 ...

  7. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  8. mysql必知必会系列(一)

    mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...

  9. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  10. 《MySQL必知必会》整理

    目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...

随机推荐

  1. Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

    最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders ...

  2. 多种数据库之间 update的不同

    sql server update a set a.gqdltks=b.gqdltks,a.bztks=b.bztks from landleveldata a,gdqlpj b where a.GE ...

  3. Silverlight应用小知识点

    1 Silverlight目录下创建的类   与  根目录下创建的类:  是不同的:  Silverlight 不能调用根目录下的类:

  4. 在线修改GTID模式

    在线修改GTID模式 1. 在每一台机器上执行命令 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN; 这是很重要的一步,必须确保服务器上没有违反GTID规范的 ...

  5. gh-ost原理

    gh-ost原理 一.三种模式架构图 1.连上从库,在主库上修改 这是gh-ost默认的工作模式,它会查看从库情况,找到集群的主库并且连接上去,对主库侵入最少,大体步骤是: 在主库上创建_xxx_gh ...

  6. Sybase:delete与truncate、drop区别

    Sybase:delete与truncate.drop区别 区别: TRUNCATE TABLE TABLENAME:删除内容.释放空间但不删除定义. DELETE FROM TABLENAME:删除 ...

  7. Apache 虚拟主机配置

    开放虚拟主机文件 修改主配置文件 解开注释,使用虚拟主机配置文件. vim /usr/local/apache2/conf/httpd.conf Include conf/extra/httpd-vh ...

  8. django使用migrations迁移版本和数据库中报错解决方案

    1.到数据库表django_migrations中查看app中看看app列 2.到项目对应的app模块中打开migrations文件查看生成的文件与数据库app列中的是不是一样 3.找到哪里不一致的文 ...

  9. 简单介绍java Enumeration(转)

    Enumeration接口 Enumeration接口本身不是一个数据结构.但是,对其他数据结构非常重要. Enumeration接口定义了从一个数据结构得到连续数据的手段.例如,Enumeratio ...

  10. Eclipse 启动tomcat 访问主页报错404

    问题 tomcat用startup.sh启动,访问localhost:8080能正常访问,用Eclipse service启动tomcat,访问localhost:8080报错404 解决方法 1. ...