儲存過程 查 改 刪
儲存過程的查、改、刪
一、儲存過程的查詢
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>
@author:http://www.cnblogs.com/geaozhang/