设为首页 收藏本站
查看: 1087|回复: 1

[经验分享] MySQL存储过程

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-12-2 08:58:59 | 显示全部楼层 |阅读模式
1、什么是存储过程?       存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
       在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。
       触发器是一种特殊类型的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、 Insert、 Delete 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
2、参数类型参数 :MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:
      CREATE PROCEDURE 过程名([[IN |OUT |INOUT ] 参数名 数据类形...])
(1)IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值;
(2)OUT 输出参数:该值可在存储过程内部被改变,并可返回;
(3)INOUT 输入输出参数:调用时指定,并且可被改变和返回。
3、存储过程的操作(1)CREATE  PROCEDURE(创建)
       由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词 OUT或INOUT。
20131130102108796.jpg
(2)DROP  PROCEDURE (删除)
       这个语句被用来移除一个存储程序。不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程。
20131130102131921.jpg
(3)CALL语句(存储过程的调用)
       CALL语句调用一个先前用CREATE PROCEDURE创建的程序。
       CALL语句可以用声明为OUT或的INOUT参数的参数给它的调用者传回值。
       存储过程名称后面必须加括号,哪怕该存储过程没有参数传递。
DSC0000.jpg
(4)SHOW CREATE PROCEDURE(类似于SHOW CREATE TABLE,查看一个已存在的存储过程)
20131130102213093.jpg
(5)BEGIN ... END(复合语句) 20131130102237656.jpg
(6) DECLARE语句(用来声明局部变量)
       DECLARE语句被用来把不同项目局域到一个子程序:局部变量。DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。
20131130102253093.jpg

补充知识:
(1)DEFINER用于指明存储过程是由哪个用户定义的,默认存储过程的定义者是存储过程,跟存储过程的使用权限无关。
          INVOKER用于指定哪些用户有调用存储过程的权限,此时会以调用者的权限去执行存储过程。
4、游标游标就是一个cursor,就是一个标识,用来标识数据取到什么地方了。你也可以把它理解成数组中的下标。
(1)声明游标
       DECLARE cursor_name CURSOR FOR select_statement
       这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。声明游标后也是单条操作的,但是不能用SELECT语句不能有INTO子句。
(2)OPEN语句
       OPEN cursor_name
       这个语句打开先前声明的游标。
(3)FETCH语句
       FETCH cursor_name INTO var_name [, var_name] ...
       这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。
(4)CLOSE语句
       CLOSE cursor_name
       这个语句关闭先前打开的游标。


参考资料:
【1】存储过程:http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html
【2】游标:http://crocodile.iteye.com/blog/1467189
【3】样例:http://www.iyunv.com/Linux/2012-12/75228.htm



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-10870-1-1.html 上篇帖子: MySQL支持的数据类型 下篇帖子: mysql安装常见问题(系统找不到指定的文件、发生系统错误...

尚未签到

发表于 2014-1-5 12:34:16 | 显示全部楼层
■■ヽ︶ㄣ今天是莪最后一次说爱你。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表