存儲過程的查、改、刪


一、存儲過程的查詢

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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM