存儲過程_查-改-刪
一、存儲過程的查詢
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>
存儲過程_查-改-刪