MySQL存储过程与函数篇,修改特性及删除
1、创建用于测试的存储过程
CREATE PROCEDURE test_1(IN invalue INT(11),OUT outvalue INT(11))
BEGIN
set outvalue = 100 * invalue;
END;

2、创建测试用的存储函数
CREATE FUNCTION test_2(invalue INT(11))
RETURNS INT(11)
BEGIN
RETURN (100 * invalue);
END;

1、MYSQL不提供存储过程或函数的代码修改,只能修改存储过程或函数的定义,如果一定要修改存储过程或函数的代码,需要删除原来的代码,并创建新的同名存储过程

2、修改特性语法结构:
ALTER {PROCEDURE | FUNCTION} 过程或函数名称 [存储过程或函数的特性]
存储过程的特性如下:
CONTAINS SQL,表示子程序包含SQL语句,但是,不包含读或写数据的语句
NO SQL,表示子程序中,不包含SQL语句
READS SQL DATA,表示子程序中,包含读数据的语句
MODIFIES SQL DATA,表示子程序中,包含写数据的语句
SQL SECURITY {DEFINER | INVOKER},指明谁有权限来执行
DEFINER,表示只有定义者,自己才能够执行
INVOKER,表示调用者可以执行
COMMENT’string’,表示注释信息
3、查询当前存储过程相关定义:
示例
查询当前存储过程相关定义:
SELECT SPECIFIC_NAME,SECURITY_TYPE,SQL_DATA_ACCESS FROM information_schema.ROUTINES where ROUTINE_NAME='test_1';

4、修改当前存储过程定义:
ALTER PROCEDURE test_1 MODIFIES SQL DATA SQL SECURITY INVOKER;

5、再次查询存储过程相关定义,查看修改结果
SELECT SPECIFIC_NAME,SECURITY_TYPE,SQL_DATA_ACCESS FROM information_schema.ROUTINES where ROUTINE_NAME='test_1';

6、修改存储函数的定义
示例
查询当前存储函数相关定义:
SELECT SPECIFIC_NAME,SQL_DATA_ACCESS,ROUTINE_COMMENT FROM information_schema.ROUTINES where ROUTINE_NAME='test_2';

7、修改当前存储函数定义:
ALTER FUNCTION test_2 READS SQL DATA COMMENT '测试修改存储函数';

8、再次查询存储函数相关定义,查看修改结果
SELECT SPECIFIC_NAME,SQL_DATA_ACCESS,ROUTINE_COMMENT FROM information_schema.ROUTINES where ROUTINE_NAME='test_2';

1、语法结构:
DROP {PROCEDURE | FUNCTION} [IF EXISTS] 过程或函数名称
[IF EXISTS] : 如果存在对应的存储过程或函数名称,则执行删除指令

2、删除存储过程
DROP PROCEDURE IF EXISTS test_1;

3、查看存储过程是否删除成功
SELECT * FROM information_schema.ROUTINES where ROUTINE_NAME='test_1';

4、删除存储方法
DROP FUNCTION IF EXISTS test_2;

5、查看是否删除成功
SELECT * FROM information_schema.ROUTINES where ROUTINE_NAME='test_2';
