多语言展示
当前在线:460今日阅读:23今日分享:25

MySQL存储过程与函数篇,修改特性及删除

MySQL中,管理存储过程或函数势必涉及到需要修改以及删除部分内容,使用ALTER语句可以修改存储过程或函数的特性,使用DROP语句可以删除存储过程或函数。
工具/原料
1

电脑

2

MySQL

3

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';

注意事项

MYSQL不提供存储过程或函数的代码修改,只能修改存储过程或函数的定义

推荐信息