• 存储过程的查、改、删


    一、存储过程的查询

    1、通过数据字典表查询

      存储过程的定义信息保存在数据字典表information_schema.routines中:

    mysql> select ROUTINE_NAME, ROUTINE_TYPE
        -> from information_schema.ROUTINES
        -> where ROUTINE_SCHEMA='db1';
    +----------------+--------------+
    | routine_name   | routine_type |
    +----------------+--------------+
    | difference     | PROCEDURE    |
    | inout_param    | PROCEDURE    |
    | in_param       | PROCEDURE    |
    | out_param      | PROCEDURE    |
    | VerboseCompare | FUNCTION     |
    | Ver_Compare    | FUNCTION     |
    +----------------+--------------+
    
    mysql> SELECT name FROM mysql.proc WHERE db='db1';
    +----------------+
    | name           |
    +----------------+
    | difference     |
    | inout_param    |
    | ……             |
    +----------------+

    2、使用show语句查询

    SHOW PROCEDURE STATUS WHERE db='数据库名';

    3、查看存储过程详细的定义信息

    SHOW CREATE PROCEDURE 数据库.存储过程名;

     

    二、存储过程的修改

    注意:

      ALTER {PROCEDURE | FUNCTION}……语句只能改变存储过程的特征不能修改过程的参数以及过程体如果想做这样的修改,必须先使用DROP PROCEDURE 删除过程,然后使用and CREATE PROCEDURE重建过程

    ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
    
    characteristic:
      COMMENT 'string'
      |LANGUAGE SQL
      |{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
      |SQL SECURITY { DEFINER | INVOKER }

    存储过程的特征characteristic:指定存储的特性

    1、COMMENT 'string'是注释信息;

      LANGUAGE SQL是指明过程体是用sql语言编写的,而不是java或php;

    2、SQL SECURITY { DEFINER | INVOKER }指明谁有权限来执行:

      DEFINER表示只有定义者自己才能够执行;

      INVOKER表示调用者可以执行。

    在存储过程定义时:

    CREATE
        [DEFINER = { user | CURRENT_USER }]
        PROCEDURE
        ……

    [DEFINER = { user | CURRENT_USER }]:指定存储过程的定义者,指定CURRENT_USER和不指定定义者选项的效果是一样的

    3、{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }:

    MySQL现在不使用:

      CONTAINS SQL表示子程序包含SQL语句,但不包含读或写数据的语句;

      NO SQL表示子程序中不包含SQL语句;

      READS SQL DATA表示子程序中包含读数据的语句;

      MODIFIES SQL DATA表示子程序中包含写数据的语句。

     

    三、存储过程的删除

    DROP PROCEDURE [IF EXISTS] db_name.sp_name;

    如果是在当前数据库中的存储过程:DROP PROCEDURE [过程1[,过程2…]]

    从MySQL的表格中删除一个或多个存储过程。

     

    四、存储过程的安全

    不是每个用户都可以调用一个存储过程;一个用户想调用其它用户创建的过程,必须被授予过程的execute权限:

    GRANT  EXECUTE
            ON PROCEDURE  <过程名>
        TO  <user>
  • 相关阅读:
    nginx
    git命令
    mysql的优化
    nginx下的负载均衡
    IO模式和IO多路复用
    回顾java基础—Java数据类型
    解决jdk1.8上编译dubbo失败
    KB,Kb单位换算,网络带宽中的Kbps和KB/s到底是什么意思? (注:B和b的区别)
    生成器函数_yield_yield from_send
    推导式_集合
  • 原文地址:https://www.cnblogs.com/geaozhang/p/6817698.html
Copyright © 2020-2023  润新知