内容详情 您现在的位置是: 首页> 其他随笔

存储过程的查、改、删

发布时间:2021-07-29 18:54 已围观:1328

摘要存储过程的查、改、删

一、存储过程的查询

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>

声明:本文内容摘自网络,版权归原作者所有。如有侵权,请联系处理,谢谢~
转发:GeaoZhang--https://www.cnblogs.com/geaozhang/p/6817698.html

赞一个 (299)