- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MySQL的存储过程解析教程
MySQL的存储过程解析
1、存储过程简介
我们使用的sql语言,需要先编译然后才会执行,然而存储过程(procedure)是为了万恒特定功能的sql语句集合,经编译后存储在数据库中,用户通过存储过程的名字并给定参数或传值的方式来调用执行他。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有控制语句和sql语句组成。适用于不同的平台和应用程序执行相同的函数。
存储过程具有以下优点:
存储过程增强了sql语言的功能和灵活性。存储过程可以用流控制语句的编写,具有很强的灵活性,可以完成复杂的判断和较为复杂的运算。
存储过程允许的标准组件是编程。存储过程被创建以后,在程序中多次被调用,而不必进行重新编写。对存储过程的修改不会影响程序源代码的执行。
存储过程可以执行较快的执行速度。若某一操作中包含大量的事物处理代码或分别被多次执行,那么储存过程要比批处理的执行速度快很多。因为存储过程是预编程的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理需要每次进行编译和优化,速度相对要慢。(总结:存储过程比批处理要快很对,原因是:前者进行预编译。)
存储过程可以减少网络流量。针对数据库操作的增删改查,存储过程在网路中只是传递该调用的语句。
存储过程可看做是一种安全机制来充分利用。可以对存储过程的权限进行设置,进而事项对响应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证数据的安全。(总结:个人感觉,不太实用)
2、MySQL存储过程的创建
格式
格式:create procedure 过程名([过程参数[,…]])[特性…]
过程体。
需要注意的是:delimiter //和delimiter ;两句,delimiter 是分隔符的意思,因为MySQL默认以“;” 为分隔符,如果没有生命分隔符,那么编译器会把编译器存储过程当成sql语句进行处理,则存储过程的编译过程会报错,所以要实现用delimiter关键字申明当前段分隔符,这样MySQL才会将”;” 当做存储过程的代码,而不会执行这些代码,当然用完之后要用delimiter ; 进行分割符的还原。
存储过程根据需要可能有输入、输出或者是输入输出;过程体的开始和结束是以begin和end进行标示的,后边不加”;”
参数
MySQL的储存过程共存在三种类型的参数分别是:IN 、OUT 和INOUT
格式为:create procedure 过程名([IN |OUT|INOUT[参数名 数据类型…]])
IN 输入参数:标示该参数必须在调用存储过程时制定,存储过程中进行参数的修改不能被返回,为默认值。
OUT输出参数:该值在存储过程中可以被改变,返回修改后的值。
INOUT输入输出参数:调用时候可以进行修改和返回。
IN参数输入例子:
创建一个名为demo_in 的存储过程
执行结果:
输入一个参数后,可以获取新输入的值。
OUT输出参数例子:
创建一个demo_out的过程
执行结果:
可以看出OUT 无法向过程里进行传值,过程中的值可以正确的返回。
INOUT参数的例子:
创建一个名为demo_inoutde 过程名
执行结果:
可以看出既可以输入参数也可以返回参数。
变量
变量定义
Declare variable_name[,variable_name…] datatype [default value]
其中datatype为MySQL的数据类型,如int float date varchar
例如:
declare l_int int default 4000;
declare l_numeric number(8,2) default 10.99;
declare l_date date default ‘1990-09-11’;
declare l_datetime datetime default ‘1990-09-11 24:00:00’;
declare l_varchar varchar(20) default ‘you are very good’;
变量赋值
Set 变量名=表达式值
用户变量
客户端使用用户变量例子:
使用@开始定义变量
存储过程是使用用户变量案例:
跨存储过程的用户变量间的传递:
注释
MySQL存储过程的注释方式是:--
例子:
3、MySQL存储过程的查询
我们可以用select name from mysql.proc where db=’数据库名’;
或者select routine_name from information_schema.routines where routine_schema=数据库名;
或者show procedure status w
文档评论(0)