试管包男孩

分类:

mysql存储过程使用

版本开始支持存储过程。

存储过程(StoredProcedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。

优点

将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用

批量处理:SQL+循环,减少流量,也就是“跑批”

统一接口,确保数据的安全

缺点

存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。

存储过程的性能调校与撰写,受限于各种数据库系统。

存储过程的创建和调用

存储过程就是具有名字的一段代码,用来完成一个特定的功能。

创建的存储过程保存在数据库的数据字典中。

创建存储过程

CREATE[DEFINER={user|CURRENT_USER}]PROCEDUREsp_name([proc_parameter[,]])[characteristic]routine_bodyproc_parameter:[IN|OUT|INOUT]param_nametypecharacteristic:COMMENT'string'|LANGUAGESQL|[NOT]DETERMINISTIC|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}routine_body:ValidSQLroutinestatement[begin_label:]BEGIN[statement_list]……END[_label]

存储过程的参数

MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:

CREATEPROCEDURE存储过程名([[IN|OUT|INOUT]参数名数据类形])

3种参数类型:

IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)

OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

建议:

inout参数就尽量的少用。

示例操作

1.首先创建一张students表

createtablestudents(idintprimarykeyauto_increment,ageint,namevarchar(20),cityvarchar(20))charactersetutf8;insertintostudentsvalues(null,22,'赵四','杭州');insertintostudentsvalues(null,16,'刘能','上海');insertintostudentsvalues(null,20,'谢广坤','深圳');insertintostudentsvalues(null,21,'刘美兰','北京');insertintostudentsvalues(null,20,'宋晓峰','湖北');insertintostudentsvalues(null,21,'谢大脚','江苏');insertintostudentsvalues(null,20,'苏玉红','天津');insertintostudentsvalues(null,21,'陈艳兰','云南');

2.不带参数的存储过程

执行存储过程:CALLselect_students_count()

3.带参数的存储过程

执行存储过程:CALLselect_students_by_city('上海')

4.带有输出参数的存储过程

执行存储过程:set@_age=20;set@_name='谢广坤';callselect_students_by_name(@_name,@_city,@_age);select@_nameasname,@_cityascity,@_ageasage;

5.带有通配符的存储过程

执行存储过程:callselect_students_by_likename('%刘%');

6.使用存储过程进行增加、修改、删除

增加:

创建存储过程CREATEPROCEDUREupdate_student(_idINT,_namenvarchar(25),_ageINT,_citynvarchar(25))BEGINUPDATEstudentsSETNAME=_name,age=_age,city=_cityWHEREid=_id;END;创建存储过程CREATEPROCEDUREdelete_student_by_id(_idINT)BEGINDELETEFROMstudentsWHEREid=_id;END;#执行存储过程:CALLdelete_student_by_id(9);

查询所有的存储过程:

showprocedurestatuswheredb='mcms';

查询某个存储过程:

_student_by_id;

删除存储过程

_student_by_id



标签:

返回列表