mysql学习笔记-存储过程与函数

1、存储过程

语法

CREATE
    [DEFINER = user]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

2、自定义函数

CREATE
    [DEFINER = user]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

func_parameter:
    param_name type

3、存储过程与自定义函数区别


存储过程实现的过程要复杂一些,而函数的针对性较强;

存储过程可以有多个返回值,而自定义函数只有一个返回值;

存储过程一般独立的来执行,而函数往往是作为其他SQL语句的一部分来使用;

存储过程说白了就是把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要的时候从数据库中直接调用,省去了编译的过程.提高了运行速度;
同时降低网络数据传输量

4、SHOW STATUS 、SHOW CREATE 以及系统的information_schema表

  • MySQL中可以使用 SHOW STATUS 语句或 SHOW CREATE 语句查看存储过程和函数的状态信息 ,也可以直接从系统的information_schema中查询。
  • CREATE PROCEDURE test_1(IN invalue INT(11),OUT outvalue INT(11))
    BEGIN
        set outvalue = 100 * invalue;
    END;
    
    CREATE FUNCTION test_2(invalue INT(11))RETURNS INT(11)
    BEGIN
        RETURN (100 * invalue);
    END;
    
    -- 查看状态
    SHOW PROCEDURE STATUS;
    SHOW PROCEDURE STATUS LIKE 'test_%';
    SHOW FUNCTION STATUS;
    
    -- 查看定义
    SHOW CREATE PROCEDURE test_1;
    SHOW CREATE FUNCTION test_2;
    
    -- information_schema.Routines表中查看
    SELECT * FROM information_schema.ROUTINES where ROUTINE_NAME='test_1';