1. 程式人生 > >儲存過程 查 改 刪

儲存過程 查 改 刪

儲存過程的查、改、刪

一、儲存過程的查詢

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/