MySQL存储过程系列

0    86    1

Tags:

👉 本文共约4626个字,系统预计阅读时间或需18分钟。

记录MYSQL存储过程中的关键语法:

DELIMITER // 声明语句结束符,用于区分;
CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程
BEGIN …. END 存储过程开始和结束符号
SET @p_in=1 变量赋值
DECLARE l_int int unsigned default 4000000; 变量定义

什么是mysql存储例程?
存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令.

为什么要使用mysql存储过程?
我们都知道应用程序分为两种,一种是基于web,一种是基于桌面,他们都和数据库进行交互来完成数据的存取工作。假设现在有一种应用程序包含了这两 种,现在要修改其中的一个查询sql语句,那么我们可能要同时修改他们中对应的查询sql语句,当我们的应用程序很庞大很复杂的时候问题就出现这,不易维 护!另外把sql查询语句放在我们的web程序或桌面中很容易遭到sql注入的破坏。而存储例程正好可以帮我们解决这些问题。
存储过程(stored procedure)、存储例程(store routine)、存储函数区别
Mysql存储例程实际包含了存储过程和存储函数,它们被统称为存储例程。
其中存储过程主要完成在获取记录或插入记录或更新记录或删除记录,即完成select insert delete update等的工作。而存储函数只完成查询的工作,可接受输入参数并返回一个结果。

创建mysql存储过程、存储函数
create procedure 存储过程名(参数)
存储过程体
create function 存储函数名(参数)

下面是存储过程的例子:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

MySQL存储过程系列MySQL存储过程系列

注:
(1)这里需要注意的是DELIMITER//和DELIMITER;两句,DELIMITER是分割符的意思,因为MySQL默认以”;”为分隔 符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当 前段分隔符,这样MySQL才会将”;”当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
(2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用”,”分割开。
(3)过程体的开始与结束使用BEGIN与END进行标识。
这样,我们的一个MySQL存储过程就完成了,是不是很容易呢?看不懂也没关系,接下来,我们详细的讲解。

参数

MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:
CREATEPROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形…])
IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
INOUT 输入输出参数:调用时指定,并且可被改变和返回

. IN参数例子

创建:

MySQL存储过程系列

执行结果:

MySQL存储过程系列MySQL存储过程系列

以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值

.OUT参数例子

创建:

MySQL存储过程系列MySQL存储过程系列

执行结果:

MySQL存储过程系列MySQL存储过程系列

INOUT参数例子

创建:

MySQL存储过程系列MySQL存储过程系列

执行结果:

MySQL存储过程系列MySQL存储过程系列

局部变量

变量定义

局部变量声明一定要放在存储过程体的开始
DECLAREvariable_name [,variable_name…] datatype [DEFAULT value];
其中,datatype为MySQL的数据类型,如:int, float, date,varchar(length)
例如:

MySQL存储过程系列MySQL存储过程系列

变量赋值

SET 变量名 = 表达式值 [,variable_name = expression …]

用户变量

在MySQL客户端使用用户变量

MySQL存储过程系列MySQL存储过程系列

在存储过程中使用用户变量

MySQL存储过程系列MySQL存储过程系列

在存储过程间传递全局范围的用户变量

MySQL存储过程系列MySQL存储过程系列

注意:
①用户变量名一般以@开头
②滥用用户变量会导致程序难以理解及管理

注释

MySQL存储过程可使用两种风格的注释
双模杠:–
该风格一般用于单行注释
c风格: 一般用于多行注释
例如:

MySQL存储过程系列MySQL存储过程系列

MySQL存储过程的调用

用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。具体的调用方法可以参看上面的例子。

MySQL存储过程的查询

我们像知道一个数据库下面有那些表,我们一般采用showtables;进行查看。那么我们要查看某个数据库下面的存储过程,是否也可以采用呢?答案是,我们可以查看某个数据库下面的存储过程,但是是令一钟方式。
我们可以用
selectname from mysql.proc where db=’数据库名’;
或者
selectroutine_name from information_schema.routines where routine_schema=’数据库名’;
或者
showprocedure status where db=’数据库名’;
进行查询。
如果我们想知道,某个存储过程的详细,那我们又该怎么做呢?是不是也可以像操作表一样用describe 表名进行查看呢?
答案是:我们可以查看存储过程的详细,但是需要用另一种方法:
SHOWCREATE PROCEDURE 数据库.存储过程名;
就可以查看当前存储过程的详细。

MySQL存储过程的修改

ALTER PROCEDURE
更改用CREATE PROCEDURE 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。

MySQL存储过程的删除

删除一个存储过程比较简单,和删除表一样:
DROPPROCEDURE
从MySQL的表格中删除一个或多个存储过程。

MySQL存储过程的控制语句

变量作用域

内部的变量在其作用域范围内享有更高的优先权,当执行到end。变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储
过程外再也不能找到这个申明的变量,但是你可以通过out参数或者将其值指派
给会话变量来保存其值。

MySQL存储过程系列MySQL存储过程系列

条件语句

if-then -else语句

MySQL存储过程系列MySQL存储过程系列

case语句:

MySQL存储过程系列MySQL存储过程系列

循环语句

while ···· end while:

MySQL存储过程系列MySQL存储过程系列

repeat···· end repeat:

它在执行操作后检查结果,而while则是执行前进行检查。

MySQL存储过程系列MySQL存储过程系列

loop ·····endloop:

loop循环不需要初始条件,这点和while 循环相似,同时和repeat循环一样不需要结束条件, leave语句的意义是离开循环。

MySQL存储过程系列MySQL存储过程系列

LABLES 标号:

标号可以用在begin repeat while 或者loop 语句前,语句标号只能在合法的语句前面使用。可以跳出循环,使运行指令达到复合语句的最后一步。

ITERATE迭代

ITERATE:

MySQL存储过程系列MySQL存储过程系列

MySQL存储过程的基本函数

字符串类

MySQL存储过程系列MySQL存储过程系列

数学类

MySQL存储过程系列

日期时间类

MySQL存储过程系列MySQL存储过程系列

MySql分页存储过程

MySql测试版本:5.0.41-community-nt

MySQL存储过程系列MySQL存储过程系列

调用

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部