010—存储过程和函数


.对待存储过程和函数的态度在实际项目中应该尽量少用存储过程和函数,理由如下:1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了。2.调试麻烦,在db中报一个错误和在应用层报一个错误不是一个概念,那将是毁灭性打击,直接一个error1045什么的更本毫无头绪。3.扩展性不高。所以在互联网时代大型项目应该尽量少使用(不使用)存储过程和函数!!!.创建存储过程2.1什么是存储过程?存储过程和存储函数都是一组sql语句的集合。这些语句集合被当做一个整体存入数据库中。2.2创建存储过程的语法:createprocedure存储过程名(参数列表)sql语句.示例1delimiter//createprocedurepro()readssqldatabeginselect*fromstu;end//那么我们现在就有一个存储过程pro了,但是这个存储过程他是没有参数的,他只是执行一次查询操作。我们现在来讲解一下这个存储过程的结构:delimiter//是将分号转化为//因为在sql执行时当他遇到分号;时他就讲停止所以我们必须将其转化为//直到最后一行才会停止执行。readssqldata解释characteristic的状态在这里是只读模式,其他的模式还有:nosql没有sql语句,inssql不包含读和写的语句,modifiessqldata包含写入数据的语句等等。begin/***/end在存储过程中当有多条语句集合时我们必须使用beginend开发云主机域名//结束整个存储过程2.3使用存储过程现在只是创建了一个存储过程,那么我们怎么来使用这个存储过程呢?语法:call存储过程名()将上一个存储过程pro使用的例子:callpro();2.4创建一个带参数的存储过程参数列表:存储过程的参数有三种类型:in,out,inout分别表示传入参数和传出参数,和既传入也传出参数。例子:首先我们来创建两张表:课程表是学生表的从表。createtablestu(stu_idbigintprimarykeyauto_increment,#学号stu_namevarchar(10)notnull,#姓名stu_majorintnotnull,#专业号stu_sexchar,#性别stu_indate,#入学日期stu_birthdate,#出生日期foreignkey(stu_major)referencesmajor(ma_id)#专业外键设置);createtablemajor(ma_idintprimarykey,ma_namevarchar(15),ma_bossvarchar(10));insertintomajorvalues(1,”信管“,”张三“);insertintomajorvalues(2,”电子商务“,”李四“);insertintostuvalues(1,”小明“,1,”“,”2017-09-01″,”1998-12-23”);insertintostuvalues(2,”小高“,1,”“,”2017-09-01″,”1998-05-01”);insertintostuvalues(3,”小李“,2,”“,”2017-09-01″,”1999-04-01”);我们再来创建一个带有参数的存储过程找到学生的主修课的名字,代码如下:delimiter//createprocedurepro1(insnamevarchar(10),outmavarchar(10))readssqldatabeginselectma_nameintomafrommajorwherema_id=(selectstu_majorfromstuwherestu_name=sname);end//使用这个存储过程:代码如下:set@ma=”没查询之前“;callpro1(“小李“,@ma);select@ma;解释一下代码:首先使用set@ma定义一个全局变量,然后在使用call存储过程名语法调用存储过程,同时全局变量ma的值也改变了。.创建一个存储函数3.1存储过程和存储函数的不同。1.在函数中必须要有return返回值2.在存储过程中参数有inoutinout三种,默认为in类型,但是在函数中只有一种in类型。3.2创建一个函数语法:createfunction函数名()   return返回类型        sql语句集合示例2delimiter//createfunctionfun1(numint)returnsintbeginreturnnum+1000;end//显然函数与存储过程的最大的区别就是在于return3.3调用函数使用语法不在使用关键字call,而是关键字selectselect函数名例子:selectfun1(100);.删除存储函数和存储过程语法:dropprocedure|function存储过程名或者是函数名例子:dropprocedurepro;注意:此时的存储过程或者函数名称是不带括号的!!!.在存储过程和存储函数中使用游标5.1为什么需要游标?当我们在使用存储过程的时候可能用到多条数据,那么我们就需要用到游标来存放多条数据。5.2使用游标的注意点游标不能单独存在,必须在存储过程或者是存储函数中使用。5.3使用游标语法:1.创建游标:declare游标名cursorforselect语句2.打开游标:open游标名3.使用游标:fetch游标名into变量名4.关闭光标:close游标名示例3delimiter//createfunctionfun3(idint)returnsintreadssqldataBegindeclarecurcursorforselectstu_idfromstu;opencur;fetchcurintoid;closecur;returnid;End//使用set@id=0;selectfun3(@id);可以发现游标只是将第一个值给了变量。

相关推荐: centos7系统怎么样安装mysql5.7

下文主要给大家带来entos7系统怎么样安装mysql5.7,希望这些内容能够带给大家实际用处,这也是我编辑entos7系统怎么样安装mysql5.7这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。一、检查系统是否安装其他版本的MYSQL数据yum l…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/09 17:46
下一篇 06/09 17:46

相关推荐