存储过程是指:为完成特定任务的一条或多条MYSQL语句的集合。

猎八哥原创,本文原址链接:http://www.cnblogs.com/liebagefly/p/7521974.html

存储过程的优势:

1.执行速度快。存储过程只编译一次,以后每次执行都不需要重新编译,而sql语句每次执行都需要编译一次,所以存储过程的执行速度快。(当然第一次的速度并不比sql语句快)。

2.减少数据库开发人员的工作量,存储过程可以多次使用。

3.安全性好,可以设置某些用户才具有对指定存储过程的使用权,存储过程的参数化可以防止SQL注入攻击。

4.可封装性,使复杂的操作简单化,调用存储过程的时候不需要传递过多的SQL语句,只需要传递名称以及参数即可。

5.减少网络流量。调用存储过程的时候不需要传递过多的SQL语句,只需要传递名称以及参数(当然有的存储过程没有参数就无需传递参数了,但是注意调用存储过程一定要记得加()括号)就可以了,因此降低了网络传输的数据量。

缺点:1.存储过程可移植性差,不同数据库的存储过程的语法差别较大。(但是我感觉谁会没事乱该数据库呀!今天你用mysql,明天你用oracle,如果更改数据库意味着项目有着重大变动,要更改众多的东西,所以这点存储过程的更改算不了什么)

2.维护困难,当需求变化或者项目需要扩展时会导致修改较为麻烦。(这个就比较坑了,各种更改的确麻烦)。

总之存储过程是把双刃剑,具体用或不用要具体问题具体分析。下面看一些存储过程的常用方法和语句。

存储过程常用语句展示所有存储过程:show procedure status;展示存储过程的创建语句:show create procedure procedurename;删除存储过程:DROP  PROCEDURE  procedurename ;

  

存储过程关键字介绍:
in为传递给存储过程(默认不写),out从存储过程传出,inout从存储过程传入或传出,into对变量进行赋值

学生表的建表语句。

存储过程特点:A.调用存储过程,可以显示结果,也可以不显示结果。

B.每个表中的存储过程不能修改,不能覆盖;也不能出现类似java语言的重载(即:不能建立参数个数不同但存储过程名字相同的存储过:)。

(1)不显示结果类型的。

学生表
CREATE TABLE `student` (`id` int(11) NOT NULL,`name` varchar(255) DEFAULT NULL,`zongfen` int(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk

创建存储过程,out表示相应的参数用来从存储过程传出一个值,into表示给p1等赋值1.创建存储过程
create procedure zongfenmma(out p1 DECIMAL(8,2),out ph DECIMAL(8,2),out pa DECIMAL(8,2)
)
beginselect MIN(zongfen) into p1 from student;select MAX(zongfen) into ph from student;select AVG(zongfen) into pa from student;
end;
2.调用存储过程,调用此存储过程不显示结果,它返回以后可以显示(或者处理中需要使用)的变量(@zongfenmin)。
call zongfenmma( @zongfenmin,@zongfenmax,@zongfenavg );3.显示变量的值即最小、最大、平均值。 select @zongfenmin,@zongfenmax,@zongfenavg;

                    

(2)显示结果类型的。

1.创建存储过程;注意注意:创建存储过程必须要有括号(),即使无参数也要添加。
create procedure zongfenmax()
begin select MAX(zongfen) as zfmax from student;
end;
2.调用存储过程,并返回结果。
call zongfenmax();

(3)案例:创建一个存储过程,获取学生的名字,不过成绩及格的学生要名字大写。

思路:获取学生名字,如果成绩及格将名字大写,返回名字。话不多说,直接上代码。

create procedure cjavg(in oid int,in pass boolean,out oname VARCHAR(50)
)
beginDECLARE name1 VARCHAR(50);SELECT name from student where id = oid into name1;IF pass THENSELECT upper(name1) into name1;END IF;SELECT name1 into oname;
end;在过程begin和end中定义一个变量name1,获取学生姓名并传给name1,
判断是否及格,如果成绩及格,名字大写,选择名字传给oname,call cjavg(1,1,@name);
调用村纯过程,注意,第一个1是int型,是oid,第二个是boolean型,
1表示成绩及格,0表示不及格显示名字
SELECT @name;

  

删除存储过程:drop procedure zongfenmax;注意删除存储过程时不要加()。

转载于:https://www.cnblogs.com/liebagefly/p/7521974.html

猎八哥浅谈存储过程——数据库中的双刃剑相关推荐

  1. 浅谈MySQL数据库中的锁与事务

    MySQL中的锁与锁策略 在MySQL中,为了应对并发场景下的读写,锁通常分为两类:共享锁以及排他锁.其中,共享锁允许多个连接在同一时间并发的读取相同的资源,彼此之间互不影响,所以又称为读锁.排他锁则 ...

  2. 管理中计算机系统的应用论文,浅谈计算机数据库的管理与应用论文

    浅谈计算机数据库的管理与应用论文 摘要:随着社会经济的快速发展,信息化网络技术手段不断进步,信息技术在人们日常生活.工作及学习中的广泛渗透,不仅给人们生活带来了极大便利,还极大的提升了人们工作与学习效 ...

  3. 浅谈软件性能测试中关键指标的监控与分析(转)

    浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在 ...

  4. 事物日志恢复 mysql_浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用...

    本篇文章是系列文章中的第五篇,是对前一个日志系列的补充篇.如果您对日志的基本概念还没有一个比较系统的了解,可以参看本系列之前的文章: 浅谈SQL Server中的事务日志(一)----事务日志的物理和 ...

  5. 浅谈导航数据中POI搜索技术原理

    浅谈导航数据中POI搜索技术原理之一 王健 导航技术的应用已经成为现在生活中重要组成部分,为我们的生活提供了极大的便利.基本都有这样生活的体验,搜索自己位置附近的银行网点.餐馆.那么这些POI是如何快 ...

  6. 浅谈实际开发中常用的分布式事物处理

    浅谈实际开发中常用的分布式事物处理 文章目录 前言 一.分布式事物 二.常用方案 1.使用记录表+mq机制 前言 随着微服务的流行,越来越多系统不在是单体结构,根据业务和功能拆分成不同微服务,这就导致 ...

  7. 浅谈工作/学习中找bug的思路_0_调试、try-catch以及打印报错信息和百度的方法、No default constructor for entity: com.gyf.bos.mod

    浅谈工作/学习中找bug的思路_0 文章目录 浅谈工作/学习中找bug的思路_0 调试.try-catch-以及打印报错信息和百度的方法 前言 描述 解决思路1 -- 检查移植的代码,细枝末节也不要忽 ...

  8. 浅谈智能交通中的电子地图

    浅谈智能交通中的电子地图 20世纪80年代以来,随着经济的发展和人口的增长,车和人的矛盾变得越来越尖锐,交通拥挤和阻塞现象日益严重,交通污染与交通事故等日益困扰着交通事业的发展.路网通过能力已不能满足 ...

  9. c语言弱符号与函数指针,浅谈C语言中的强符号、弱符号、强引用和弱引用【转】...

    首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引用.在看到3.5.5节弱符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样 ...

最新文章

  1. 深度强化学习的前景:帮助机器掌控复杂性
  2. 图像偏色检测算法,速度快,效果好,共享给大家。
  3. 动态获取UILabel的bounds
  4. ubuntu14.04安装intel openCL
  5. python sanic openapi_2020年了,python的web framework sanic 可以考虑生产环境部署了么?...
  6. 计算机网络连接能否隐藏位置,如何能在局域网中隐藏电脑及IP地址
  7. SAP CRM 和 SAP Cloud for Customer 的表格列项目宽度调整的原理介绍
  8. JAVA面试常考系列六
  9. viewer.js实现预览效果
  10. js 点击button切换颜色_ThingJS 和three.js开发示例对比,让开发早点下班回家!3D 可视化...
  11. 春考天津计算机知识点,天津春季高考计算机模拟试题
  12. 数学家的浪漫,你想都想不到!
  13. 消控中心人员配置_电气火灾监控系统在石药集团新药制剂配套特色原料药FDA生产中心项目...
  14. bzoj 3709: [PA2014]Bohater
  15. 什么是云计算云计算能干什么?云计算学习笔记工具素材
  16. oracle双活数据中心建设_双活数据中心 是什么
  17. 旅游网站竞品分析—携程旅行网VS去哪儿网(中)
  18. 软件测试人力面试题(含答案)
  19. RuiJi Scraper 分页抽取
  20. ictclas包 java_Java通过JNI调用ICTCLAS中文分词包的方法

热门文章

  1. 1.2机器学习基础下--python深度机器学习
  2. 程序员如何优雅地使用 Mac? - OS X - 知乎
  3. C++ classics
  4. 网站设计与开发流程图
  5. 初学 Delphi 嵌入汇编[9] - asm 可以代替 begin
  6. 博客改版日记 9.11——抱歉
  7. crysis3 android,Crytek谈安卓版《Crysis 3》:Tegra X1图形性能OK,瓶颈是CPU
  8. i3处理器_十代酷睿i3-10100F配GTX1650S组装机配置清单
  9. dSploitzANTI渗透教程之安装zANTI工具
  10. 帆软报表调用mysql存储过程_FineReport单行与数据库交互的方法