mysql数据库存储过程详解

1.什么是存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

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

2.存储过程格式

声明语句结束符,可以自定义:

DELIMITER(定界符) $$    
或
DELIMITER //

声明存储过程:

CREATE PROCEDURE demo_in_parameter(IN p_in int)   
CREATE PROCEDURE 存储过程名(输入符 参数名 参数类型)   

存储过程开始和结束符号:

BEGIN .... 
(内容)
END    

变量赋值:

SET @p_in=1  

变量定义:

DECLARE l_int int unsigned default 4000000; 

实例

mysql> delimiter $$  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
    -> BEGIN
    ->   DELETE FROM MATCHES
    ->    WHERE playerno = p_playerno;
    -> END$$
Query OK, 0 rows affected (0.01 sec)
 
mysql> delimiter;  #将语句的结束符号恢复为分号

调用存储过程

call delete_matches(12);
call 函数名(参数);

3.存储过程参数

  • IN 输入参数:表示调用者向存储过程传入值,存储过程中修改该参数的值不能被返回,为默认值
  • OUT 输出参数:表示过程向调用者传出值,在存储过程中可被改变并返回
  • INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值,可被改变返回

IN输入实例

DELIMITER //  
CREATE PROCEDURE insert_data(IN a_name string,IN a_age int)  
    BEGIN   
    insert into  aware(name,age) values (a_name ,a_age ) ;
    END//  
DELIMITER ; 

OUT实例

DELIMITER //  
CREATE PROCEDURE out_data(OUT a_name string,OUT a_age int)  
    BEGIN   
       select a_name,a_age ;
       set a_name =1;
       set a_age=2;
       select a_name,a_age;
    END//  
DELIMITER ; 

INOUT实例

mysql> delimiter $$
mysql> create procedure inout_data(inout a_name int)
    ->   begin
    ->     select a_name ;
    ->     set a_name =2;
    ->     select a_name ;
    ->   end
    -> $$
mysql> delimiter ;
 
mysql> set @a_name =1;
 
mysql> call inout_data(@a_name);
+---------+
| a_name |
+---------+
|       1 |
+---------+
 
+---------+
| a_name |
+---------+
|       2 |
+---------+
 
mysql> select @a_name ;
+----------+
| @a_name |
+----------+
|        2 |
+----------+
#调用了inout_data存储过程,接受了输入的参数,也输出参数,改变了变量

4.变量

4.1定义

局部变量声明一定要放在存储过程体的开始:

DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
DECLARE(声明) 变量名[,若干变量名...] 数据类型 [DEFAULT value(默认值)];

4.2赋值

SET @variables_name = 2
SET 变量名 = 表达式值

5.注释

MySQL 存储过程可使用两种风格的注释

两个横杆--:该风格一般用于单行注释。

/* */: 一般用于多行注释。

示例

 create procedure sp1(in p int)
     comment 'insert into a int value'
     begin
         /* 定义一个整形变量 */
         declare v1 int;
         /* 将输入参数的值赋给变量 */
         set v1 = p;
         /* 执行插入操作 */
         insert into test(id) values(v1);
     end
     //
mysql > DELIMITER //  
mysql > CREATE PROCEDURE proc1 --name存储过程名  
     -> (IN parameter1 INTEGER)   
     -> BEGIN   
     -> DECLARE variable1 CHAR(10);   
     -> IF parameter1 = 17 THEN   
     -> SET variable1 = 'birds';   
     -> ELSE 
     -> SET variable1 = 'beasts';   
    -> END IF;   
    -> INSERT INTO table1 VALUES (variable1);  
    -> END   
    -> //  
mysql > DELIMITER ;

6.存储过程的修改

6.1 查看存储过程

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

或者

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

或者

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

数据库名可通过以下代码查看

select database();
或者
status;

6.2 修改存储过程

ALTER PROCEDURE

6.3 删除存储过程

DROP PROCEDURE

参考文章

MySQL 存储过程 | 菜鸟教程MySQL 5.0 版本开始支持存储过程。 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 优点 存储过程可封装,并隐藏复杂的商业逻辑。 存储过程可以回传值,并可以接受..https://www.runoob.com/w3cnote/mysql-stored-procedure.html

你可能感兴趣的:(mysql,java)