zoukankan      html  css  js  c++  java
  • 存储过程的查、改、删

    一、存储过程的查询

    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>
  • 相关阅读:
    win10 + Debian9.1双系统安装笔记
    高效查看MySQL帮助文档的方法 (转)
    初涉Delphi Socket编程
    Delphi xe5 StyleBook的用法(待续)
    Delphi xe5如何使用Bluestacks模拟器(用真机或者用猩猩,夜神模拟器,自带的不好用)
    Delphi xe5 控件TIdhttp的用法post,get解决中文乱码问题
    如何解析DELPHI XE5服务器返回的JSON数据(翻译)及中文乱码
    解决tomcat占用8080端口
    逆地址解析协议
    前后端分离
  • 原文地址:https://www.cnblogs.com/geaozhang/p/6817698.html
Copyright © 2011-2022 走看看