zoukankan      html  css  js  c++  java
  • mysql中的过程和函数

    1 创建存储过程和函数
    创建存储过程和函数的create语法规范如下:

        CREATE
            [DEFINER = { user | CURRENT_USER }] ##很多时候不需要特别声明
            PROCEDURE sp_name ([proc_parameter[,...]])
            [characteristic ...] routine_body
    
        CREATE
            [DEFINER = { user | CURRENT_USER }]
            FUNCTION sp_name ([func_parameter[,...]]) ##输入参数
            RETURNS type  ## 声明返回值
            [characteristic ...] routine_body
    
        proc_parameter:
            [ IN | OUT | INOUT ] param_name type ##声明输入输出参数
    
        func_parameter:
            param_name type ##输入参数,由于其输出参与已经在return中声明,不需要再指定
    
        type:
            Any valid MySQL data type
    
        characteristic:
            COMMENT 'string'
          | LANGUAGE SQL
          | [NOT] DETERMINISTIC  ##默认为NOT DTERMINISTIC
          | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
          | SQL SECURITY { DEFINER | INVOKER }
    
        routine_body:
            Valid SQL routine statement
    

    如果没有声明[NOT] DETERMINISTIC选项,则mysql默认的选项为NOT DETERMINISTIC,意味着mysql针对DETERMINISTIC的优化器不会开启。因此这个选项需要特别注意的写上。
    但是仅有create语句是不够的,一般创建过程和函数有一下3个步骤:
    a 修改delimiter
    b create语句+begin...end语句 作为存储过程和函数的主体部分
    c 恢复原有的delimiter
    如 官方文档中创建存储过程的实例:

        mysql> delimiter //
    
        mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
            -> BEGIN
            ->   SELECT COUNT(*) INTO param1 FROM t;
            -> END//
        Query OK, 0 rows affected (0.00 sec)
    
        mysql> delimiter ;   
    

    创建函数的示例:

        mysql> delimiter //
        mysql> CREATE FUNCTION hello (s CHAR(20))
        mysql> RETURNS CHAR(50) DETERMINISTIC
            -> RETURN CONCAT('Hello, ',s,'!');
        Query OK, 0 rows affected (0.00 sec)
        mysql> delimiter ;
    

    2 调用方法

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

    3 查看状态

        SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']
        或者:
        SHOW CREATE {PROCEDURE | FUNCTION} sp_name
        或者从information_schema.Routines表中查看
        SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=' sp_name ' ;
    

    4 修改

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

    5 删除

        DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name
    

    6 过程和函数的好处
    可以参见博文利用mysql的存储过程比单独执行mysql的优势在哪里?好处有什么?
    简单说起来主要是:可复用,高效率,省流量,更安全。

  • 相关阅读:
    招隐-古琴曲-山中鸣琴,万籁声沉沉,何泠泠!
    因循苟且逸豫而无为,可以侥幸一时,而不可以旷日持久。——王安石
    模糊理论在图像处理中的应用
    铁关-中国首都警官合唱团-歌词
    听着总感觉莫名熟悉的音乐汇总
    石鼓歌-韩愈
    唐长安城
    唐长安的信仰——读书笔记
    Eclipse安装java web插件
    Java调用MySql数据库函数
  • 原文地址:https://www.cnblogs.com/noway-neway/p/5218644.html
Copyright © 2011-2022 走看看