MySQL中,管理存储过程或函数势必涉及到需要修改以及删除部分内容,使用ALTER语句可以修改存储过程或函数的特性,使用DROP语句可以删除存储过程或函数。
工具/原料
电脑
MySQL
Navicat等数据库可视化管理插件
创建测试用例
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';