美文网首页
MySQL存储过程01

MySQL存储过程01

作者: Amy1234567 | 来源:发表于2020-03-31 00:10 被阅读0次

MySQL5.0版本开始支持存储过程

简介

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

SQL语句需要先编译然后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定的功能时,存储过程是非常有用的。数据可中的存储过程可以看作是对编程中面向对象方法的模拟,它允许控制数据的访问方式。

存储过程的创建和调用

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

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

创建存储过程语法结构如下:

create procedure 名称()

begin

.........

end

MYSQL存储过程中的关键语法

1. 声明语句结束符,可以自定义: DELIMITER $$ 或 DELIMITER //

MYSQL默认以“;”为分隔符,如果没有声明分隔符,则编译器会把存储过程当成sql语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER &&”或“DELIMITER //”声明当前段分隔符,让编译器把两个“&&”或“//”之间的内容当作存储过程的代码,不会执行这些代码 ; “DELIMITER ;”意为把分隔符还原

2. 声明存储过程: CREATE PROCEDURE demo_in_parameter (IN p_in int)

存储过程根据需要可能会有输入,输出,输入输出参数,如果有多个参数用“,”分割。MYSQL存储过程的参数用在存储过程的定义,共有三种类型, IN, OUT, INOUT

3. 存储过程开始或结束符号:BEGIN...END

4. 变量赋值:SET @p_in = 1

5. 变量定义:DECLARE l_int int unsigned default 4000000;

6. 创建mysql存储过程,存储函数:create procedure 存储过程名(参数)

7. 存储过程体:create function 存储函数名(参数)

在默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀。在定义过程时,使用 DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个 $$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。

调用过程:call sp_name[(传参)]

存储过程体:

存储过程体包含了在过程调用时必须执行的语句,例如:dml, ddl语句,if-then-else语句和while-do语句,声明变量的declare语句等

过程体格式:以begin开始,以end结束(可嵌套)

BEGIN

    BEGIN

        BEGIN

                statements;

   END

    END

END

注意:每个嵌套块及其中的每条语句,必须以分号结束,表示过程体结束的begin-end块(又叫复合语句),则不需要分号

为语句块贴标签:

[begin_label:] BEGIN

    [statement_list]

END [end_label]

标签的两个作用:

1. 增强代码的可读性

2. 在某些语句(例如:leave和iterate语句),需要用到标签

用户变量

在MySQL客户端使用用户变量:

SELECT 'Hello World' into @x;

SET @y='Goodbye Cruel World';

SET @z=1+2+3; 

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

CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World'); 

SET @greeting='Hello';

CALL GreetWorld( );

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

CREATE PROCEDURE p1() SET @last_procedure='p1'; 

CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@last_procedure); 

CALL p1( );

CALL p2( ); 

注意:

1. 用户变量名一般以@开头

2. 滥用用户变量会导致程序难以理解及管理

MySQL存储过程的查询

select name from mysql.proc where db='数据库名';

select routine_name from information_schema.routines where routine.schema = '数据库名';

show procedure status where db='数据库名';

查看存储过程的详细

show create procedure laravel.proc1

相关文章

网友评论

      本文标题:MySQL存储过程01

      本文链接:https://www.haomeiwen.com/subject/guxvuhtx.html