• 视图、存储过程和函数(二)


    1、什么是存储过程和函数:

      存储过程和函数是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。

      存储过程和函数的区别在于函数必须有返回值,而存储过程没有,存储过程的参数可以使用IN、OUT、INOUT类型,而函数的参数只能是IN类型的。如果有函数从其他类型的数据库迁移到MySQL,那么就可能因此需要将函数改造成存储过程。

    2、存过过程和函数的相关操作:

      2.1、创建、修改存储过程或者函数

       CREATE PROCEDURE sp_name([pro_parameter[,...]])

        [characteristic...] routine_body

      CREATE FUNCTION sp_name([func_parameter[,...]])

        RETURNS type

        [characteristic ...] routine_body

      

        proc_parameter:

        [IN | OUT | INOUT] param_name type

     

        func_paramenter:

        param_name type

     

      type:

        Any valid MySQL data type

     

      characteristic:

        LANGUAGE SQL | [NOT] DETERMINISTIC 

        | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

        | SQL SERCURITY { DEFINER | INVEOKER }

        | COMMENT 'string'

      routine_body:

        Valid SQL procedure statement or statements

     

      ALTER  {PROCEDURE | FUNCTION} sp_name[characteristic...]

     

      characteristic:

        {CONTAINS SQL | NO SQL | READS SQL DATA | MODEFIES SQL DATA }

        | SQL SECURITY { DEFINER | INVOKER }

        | COMMENT 'string' 

      调用过程的语法如下:

      CALL sp_name([parameter[,...]])

      MySQL的存储过程和函数中允许包含DDL语句,也允许在存储过程中执行提交(Commit,即确认之前的修改)或者回滚(Rollback,即放弃之前的修改),但是存储过程和函数中不允许执行LOAD DATA INFIL语句。此外,存储过程和函数中可以调用其的过程或者函数。  

        CREATE DEFINER=`daiyihua`@`%` PROCEDURE `get_sun_count`(IN parentId INT,OUT sunCount INT )
        BEGIN
                #Routine body goes here...
                SELECT COUNT(1) FROM area where parent_id = parentId;
                SELECT FOUND_ROWS() INTO sunCount;
                END

       上面建立的存储过程,表示输入一个parentId,统计符合该条件的记录数并返回;

     

          可以看到调用存储过程于直接执行SQL的效果是相同的,但是存储过程的好处在于处理逻辑都封装在数据库端,调用者不需要了解中间的处理逻辑,一旦处理逻辑发生变化,只需要修改存储过程即可,而对调用者的程序完全没有影响。

      另外,和视图的创建语法稍微有点不同,存储过程和函数的CREATE语法不支持使用CREATE OR REPLACE 对存储过程和函数进行修改,如果需要对已有对存储过程或者函数进行修改,需要执行ALTER语法。

      2.2、删除存储过程或者函数

      一次只能删除一个存储过程或者函数,删除存储过程或者函数需要有该过程或者函数的 ALTER ROUTINE 权限,具体语法如下:  

      DROP  {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

      2.3 、查看存储过程或者函数

        2.3.1、查看存储过程或者函数的状态

          SHOW  {PROCEDURE | FUNCTION } STATUS [ LIKE 'PATTERN' ]

        

        2.3.2、查看存储过程或者函数的定义

          SHOW CREATE { PROCEDURE | FUNCTION } sp_name

     

       

        

  • 相关阅读:
    关于三次握手与四次挥手你要知道这些
    seafile看不见repo报500错误的解决方法
    VMWare Workstation 配置docker多macvlan网络方法
    利用Python3的dpkt库进行ARP扫描
    关于LAMP配置Let’s Encrypt SSL证书
    OpenSSL生成CA证书及终端用户证书
    CentOS7.2安装Vim8和YouCompleteMe
    CentOS 7.2安装Jenkins自动构建Git项目
    CentOS 7.2 安装Gerrit 2.14.6
    CentOS7.2编译GCC7.3
  • 原文地址:https://www.cnblogs.com/dyh2025/p/8697823.html
Copyright © 2020-2023  润新知