加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL数据库存储过程入门教程

发布时间:2022-09-13 16:08:01 所属栏目:MySql教程 来源:
导读:  在MySQL5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力。在本文中将指导读者快速掌握MySQL5的存储过程的基本知识,带领用户入门。

  存储过程介绍

  存储过程是一组为了完成
  在MySQL5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力。在本文中将指导读者快速掌握MySQL5的存储过程的基本知识,带领用户入门。
 
  存储过程介绍
 
  存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。
 
  存储过程的优点
 
  作为存储过程,有以下这些优点:
 
  (1)减少网络通信量。调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别mysql存储过程教程 pdf,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条的调用SQL语句要高得多。
 
  (2)执行速度更快。存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接中读取。
 
  (3) 更强的安全性。存储过程是通过向用户授予权限(而不是基于表),它们可以提供对特定数据的访问,提高代码安全,比如防止SQL注入。
 
  (4) 业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高
 
  当然存储过程也有一些缺点,比如:
 
  (1) 可移植性方面:当从一种数据库迁移到另外一种数据库时,不少的存储过程的编写要进行部分修改。
 
  (2) 存储过程需要花费一定的学习时间去学习,比如学习其语法等。
 
  在MySQL中,推荐使用MySQL QueryBrowswer(mysql.com/doc/query-browser/en/)这个工具去进行存储过程的开发和管理。下面分步骤来学习MYSQL中的存储过程。
 
  1、定义存储过程的结束符
 
  在存储过程中,通常要输入很多SQL语句,而SQL语句中每个语句以分号来结束,因此要告诉存储过程,什么位置是意味着整个存储过程结束,所以我们在编写存储过程前,先定义分隔符,我们这里定义//为分隔符,我们使用DELIMITER//这样的语法,就可以定义结束符了,当然你可以自己定义其他喜欢的符号。
 
  2、如何创建存储过程
 
  下面先看下一个简单的例子,
 
  DELIMITER//
 
  CREATEPROCEDURE`p2`()
 
  LANGUAGESQL
 
  DETERMINISTIC
 
  SQLSECURITYDEFINER
 
  COMMENT'Aprocedure'
 
  BEGIN
 
  SELECT'HelloWorld!';
 
  END//
 
  下面讲解下存储过程的组成部分:
 
  1) 首先在定义好终结符后,使用CREATEPROCEDURE+存储过程名的方法创建存储过程,LANGUAGE选项指定了使用的语言,这里默认是使用SQL。
 
  2)DETERMINISTIC关键词的作用是,当确定每次的存储过程的输入和输出都是相同的内容时,可以使用该关键词,否则默认为NOTDETERMINISTIC。
 
  3) SQLSECURITY关键词mysql存储过程教程 pdf,是表示调用时检查用户的权限。当值为INVOKER时,表示是用户调用该存储过程时检查,默认为DEFINER,即创建存储过程时检查。
 
  4) COMMENT部分是存储过程的注释说明部分。
 
  5) 在BEGIN END部分中,是存储过程的主体部分。
 
  3、调用存储过程的方法
 
  调用存储过程的方法很简单,只需要使用call命令即可,后面跟要调用存储过程的名称及输入的变量列表,比如:
 
  CALLstored_procedure_name(param1,param2,....)
 
  CALLprocedure1(,'stringparameter',@parameter_var);
 
  4、修改和删除存储过程
 
  可以用ALTER的语法去修改存储过程的主要特征和参数,要修改其存储过程的主体部分的话,必须要先删除然后再重建。比如下面修改存储过程num_from_employee的定义。将读写权限改为MODIFIESSQL DATA,并指明调用者可以执行。代码执行如下:
 
  ALTERPROCEDUREnum_from_employee
 
  MODIFIESSQLDATASQLSECURITYINVOKER;
 
  而删除存储过程的语法为使用DROP关键词即可。如下
 
  DROPPROCEDUREIFEXISTSp2;
 
  5、存储过程的参数
 
  下面来学习下存储过程中的参数,先看下存储过程中的参数形式,如下:
 
  CREATE PROCEDURE proc1 () 这个存储过程中是空的参数列表
 
  CREATE PROCEDURE proc1 (IN varname DATA-TYPE)这个存储过程中有一个输出参数,名称为varname,后面是跟数据类型DATA-TYPE,IN参数是默认的,因此可以省略不写
 
  CREATE PROCEDURE proc1 (OUT varname DATA-TYPE)这个存储过程中varname为输出参数
 
  CREATE PROCEDURE proc1 (INOUT varname DATA-TYPE)这个存储过程中,varname既是输入参数也是输出参数
 
  下面具体看个例子,首先是IN输入参数的例子,如下:
 
  DELIMITER//
 
  CREATEPROCEDURE`proc_IN`(INvar1INT)
 
  BEGIN
 
  SELECTvar1+ASresult;
 
  END//
 
  输出OUT参数例子如下:
 
  DELIMITER//
 
  CREATEPROCEDURE`proc_OUT`(OUTvar1VARCHAR())
 
  BEGIN
 
  SETvar1='Thisisatest';
 
  END//
 
  IN-OUT的例子:
 
  DELIMITER//
 
  CREATEPROCEDURE`proc_INOUT`(OUTvar1INT)
 
  BEGIN
 
  SETvar1=var1*;
 
  END//
 
  6、如何定义变量
 
  下面讲解下MySQL5存储过程中,如何定义变量。必须显式地在存储过程的一开始声明变量,并指出它们的数据类型,一但声明了变量后,就可以在存储过程中使用,定义变量的语法如下:
 
  DECLARE varname DATA-TYPE DEFAULT defaultvalue
 
  举例说明:
 
  DECLAREa,bINTDEFAULT;
 
  DECLAREstrVARCHAR();
 
  DECLAREtodayTIMESTAMPDEFAULTCURRENT_DATE;
 
  DECLAREv1,v2,v3TINYINT;
 
  一旦定义好变量,就可以在存储过程中对其进行赋初值,并进行各类相关的操作,比如:
 
  DELIMITER//
 
  CREATEPROCEDURE`var_proc`(INparamstrVARCHAR())
 
  BEGIN
 
  DECLAREa,bINTDEFAULT;
 
  DECLAREstrVARCHAR();
 
  DECLAREtodayTIMESTAMPDEFAULTCURRENT_DATE;
 
  DECLAREv1,v2,v3TINYINT;
 
  INSERTINTOtable1VALUES(a);
 
  SETstr='Iamastring';
 
  SELECTCONCAT(str,paramstr),todayFROMtable2WHEREb>=;
 
  END//
 
  7、MYSQL存储过程的语法结构
 
  MYSQL存储过程中支持IF,CASE,ITERATE,LEAVELOOP,WHILE和REPEAT等语法结构和语句,在本文中,着重介绍IF,CASE和WHILE语法,因为它们使用的最为广泛。
 
  IF 语句
 
  if语句使用的是if…then end if的语法结构,例子如下:
 
  DELIMITER//
 
  CREATEPROCEDURE`proc_IF`(INparam1INT)
 
  BEGIN
 
  DECLAREvariable1INT;
 
  SETvariable1=param1+;
 
  IFvariable1=THEN
 
  SELECTvariable1;
 
  ENDIF;
 
  IFparam1=THEN
 
  SELECT'Parametervalue=0';
 
  ELSE
 
  SELECT'Parametervalue
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!