mysql——存储过程简介

mysql——存储过程简介

  • 是一组为了完成特定功能的SQL语句集合
  • 比传统SQL速度更快、执行效率更高
  • 存储过程的优点
  • 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
  • SQL语句加上控制语句的集合,灵活性高
  • 在服务器端存储,客户端调用时,降低网络负载
  • 可多次重复被调用,可随时修改,不影响客户端调用
  • 可完成所有的数据库操作,也可控制数据库的信息访问权限

1. 创建存储过程

  • 使用create procedure 语句创建存储过程

创建存储过程的语法结构


CREATE PROCEDURE <过程名> ( [过程参数[,] ] ) <过程体>
[过程参数[,] ] 格式

[ IN | OUT | INOUT ] <参数名> <类型>

参数分为

  • 输入参数:IN
  • 输出参数:OUT
  • 输入/输出参数:INOUT

2. 过程体

  • 存储过程的主体部分,被称为过程体
  • 以BEGIN开始,以END结束,若只有一条SQL语句,则可以省略BEGIN-END
  • 以DELIMITER 开始和结束

mysql> DELIMITER $$    //$$是用户自定义的结束符
//省略存储过程其他步骤
mysql> DELIMITER ;   //分号前有空格

3. 修改存储过程

  • 存储过程的修改分为特征修改和内容修改

特征修改的方法

ALTER PROCEDURE <过程名> [ <特征>]

  • 内容修改可先删除原有存储过程,之后再创建的方法

特征指定了存储过程的特性,可能的取值有:

  • CONTAINS SQL 表示子程序包含 SQL 语句,但不包含读或写数据的语句。
  • NO SQL 表示子程序中不包含 SQL 语句。
  • READS SQL DATA 表示子程序中包含读数据的语句。
  • MODIFIES SQL DATA 表示子程序中包含写数据的语句。
  • SQL SECURITY { DEFINER |INVOKER } 指明谁有权限来执行。
  • DEFINER 表示只有定义者自己才能够执行。
  • INVOKER 表示调用者可以执行。
  • COMMENT ‘string’ 表示注释信息。

更具体的语法可以通过mysql命令’help alter procedure’查看, 其他命令的查看也可以使用help命令查询

4. 删除存储过程

  • 删除存储过程的语法

DROP { PROCEDURE | FUNCTION } [ IF EXISTS ] <过程名>

  • 删除的具体用法

mysql> DROP PROCEDURE PlayerRole;
Query OK, 0 rows affected (0.00 sec)
mysql> CALL PlayerRole;
ERROR 1305 (42000): PROCEDURE test.PlayerRole does not exist

5. 格式

在这里插入图片描述

6. 案例


mysql> delimiter $$
mysql> create procedure myrole()
    -> begin
    -> select name,score from info;
    -> end $$
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

mysql> show procedure status where db='auth'\G;
*************************** 1. row ***************************
                  Db: auth
                Name: myrole
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2020-08-25 19:56:02
             Created: 2020-08-25 19:56:02
       Security_type: DEFINER
             Comment: 
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

ERROR: 
No query specified


################ 修改存储过程 ##########################


mysql> alter procedure myrole modifies sql data sql security invoker;
Query OK, 0 rows affected (0.00 sec)

mysql> show create procedure myrole\G;
*************************** 1. row ***************************
           Procedure: myrole
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER="root"@"localhost" PROCEDURE "myrole"()
    MODIFIES SQL DATA
    SQL SECURITY INVOKER
begin
select name,score from info;
end
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.01 sec)

ERROR: 
No query specified

mysql> 

猜你喜欢

转载自blog.csdn.net/weixin_42099301/article/details/108223528