1. 修改存储过程和函数
使用 ALTER 语句可以修改存储过程或函数的特性,语法格式如下:
ALTER { PROCEDURE | FUNCTION } sp_name [ characteristic ... ]
其中,那 sp_name 参数表示存储过程或函数的名称;characteristic 参数指定存储函数的特性,可能的取值有:
- CONTAINS SQL 表示子程序包含 SQL 语句,但不包含读或写数据的语句。
- NO SQL 表示了程序中不包含 SQL 语句。
- READS SQL DATA 表示子程序中包含读数据的语句。
- MODIFIES SQL DATA 表示子程序中包含写数据的语句。
- SQL SECURITY { DEFINER | INVOKER } 指明谁有权限来执行。
- DEFINER 表示只有定义者自己才能够执行。
- INVOKER 表示调用者可以执行。
- COMMENT 'string' 表示注释信息。
【注】修改存储过程使用 ALTER PROCEDURE 语句,修改存储函数使用 ALTER FUNCTION 语句,这两个语句的结构是一样的,语句中的所有参教也是一样的,而且,它们与创建存储过程或函数的语句中的参数基本也是一样的,
【例】修改存储过程 CountProc 的定义,将读写权限改为 MODIFIES SQL DATA,并指明调用者可以执行。
修改之前:
mysql> SELECT SPECIFIC_NAME ,SQL_DATA_ACCESS , SECURITY_TYPE
-> FROM information_schema.Routines
-> WHERE ROUTINE_NAME = 'CountProc1' AND ROUTINE_TYPE = 'PROCEDURE';
+---------------+-----------------+---------------+
| SPECIFIC_NAME | SQL_DATA_ACCESS | SECURITY_TYPE |
+---------------+-----------------+---------------+
| CountProc1 | CONTAINS SQL | DEFINER |
+---------------+-----------------+---------------+
修改语句:
mysql> ALTER PROCEDURE CountProc1
-> MODIFIES SQL DATA
-> SQL SECURITY INVOKER;
Query OK, 0 rows affected (0.00 sec)
查看执行结果:
mysql> SELECT SPECIFIC_NAME ,SQL_DATA_ACCESS , SECURITY_TYPE
-> FROM information_schema.Routines
-> WHERE ROUTINE_NAME = 'CountProc1' AND ROUTINE_TYPE = 'PROCEDURE';
+---------------+-------------------+---------------+
| SPECIFIC_NAME | SQL_DATA_ACCESS | SECURITY_TYPE |
+---------------+-------------------+---------------+
| CountProc1 | MODIFIES SQL DATA | INVOKER |
+---------------+-------------------+---------------+
1 row in set (0.00 sec)
2. 删除存储过程和函数
删除存储过程和函数可以使用 DROP 语句,其语法结构如下:
DROP { PROCEDURE | FUNCTION } [ IF EXISTS ] Sp_name
sp_name 为要移除的存储过程或函数的名称。IF EXISTS 子句是 MySQL 的一个扩展。如果程序或函数不存储,它可以防止发生错误,产生一个用 SHOW WARNINGS 查看的警告。
【例】删除存储过程和存储函数。代码如下:
mysql> DROP PROCEDURE CountProc;
Query OK, 0 rows affected (0.50 sec)
mysql> DROP FUNCTION CountProc2;
Query OK, 0 rows affected (0.00 sec)
【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版