MySQL存储过程和函数

11.1,什么是存储过程和函数
存储过程和函数是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少在数据库和应用服务器之间的传输,对于提高数据处理的效率的有好处的
存储过程和函数的区别在于函数必须有返回值,而存储过程没有[可以有也可以没有],存储过程的参数可以使用IN,OUT,INOUT类型,二函数的参数只能是IN类型的。如果由函数从其他类型的数据库迁移到MySQL,那么就可能因此需要将函数改造成存储过程
11.2,存储过程和函数所对应权限
创建存储过程或函数需要 CREATE ROUTINE
修改或删除存储过程或函数需要 ALTER ROUTINE
执行存储过程或函数需要 EXECUTE
11.3,MySQL的存储过程和函数中允许包含DDL语句,也允许在存储过程中执行提交(commit,即确认之前的修改)或者回滚(rollback。即放弃之前的修改),但是存储过程和函数中不允许执行load data infile语句,此外,存储过程和函数中可以调用其他的过程或者函数
【调用存储过程和直接写sql的效果是相同的,但是存储过程的好处在于处理逻辑都封装在数据库端,调用者不需要了解其中的中间逻辑,一点逻辑发生改变,只需要修改存储过程即可,而对调用者的程序完全没有影响】
【和视图的创建语法稍有不同,存储过程和函数的create语法不支持create or replace 对存储过程和函数进行修改,如果需要对已有的存储过程和函数进行修改,需要执行alter语法】
11.4,存储过程参数
in【输入参数】:表示该参数的值必须在调用存储过程中指定,在存储过程中修改该参数的值不能被返回
out【输出参数】:该值可在存储过程内部被改变,并可返回
inout【可输入亦可输出】:该值可在存储过程内部被改变,并可返回
【详解:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html】
11.5,变量
1,变量定义
DECLARE variable_name [,variable_name…] datatype [DEFAULT value];
其中,datatype为MySQL的数据类型,如:int, float, date, varchar(length)
例如:
1. DECLARE l_int int unsigned default 4000000;
2. DECLARE l_numeric number(8,2) DEFAULT 9.95;
3. DECLARE l_date date DEFAULT ‘1999-12-31’;
4. DECLARE l_datetime datetime DEFAULT ‘1999-12-31 23:59:59’;
5. DECLARE l_varchar varchar(255) DEFAULT ‘This will not be padded’;
2,变量赋值
SET 变量名 = 表达式值 [,variable_name = expression …]
3,用户变量
ⅰ. 在MySQL客户端使用用户变量
ⅱ. 在存储过程中使用用户变量
ⅲ. 在存储过程间传递全局范围的用户变量
【注:如果仅仅想把数据传给MySQL存储过程,那就使用‘in’类型参数;如果仅仅从MySQL存储过程返回值,那就使用‘out’类型参数;如果需要把数据传给MySQL存储过程,还需要经过一些计算后再传回给我们,此时,要使用‘inout’类型参数】
【注:因为;分会冲突,所以要加delimiter //。将//设置为结束运行符号】
11.6,流程控制
if:P187;简单
case:P187;稍复杂
loop:实现简单的循环,但是退出循环的条件需要使用其他的语句定义,通常可以使用level语句实现,否则会成为死循环
level:用来从标注的流程构造中退出,通常和begin…end或者循环一起使用
iterate:跳过当前循环进入下一轮的循环
repeat:有条件的循环控制语句,当满足条件的时候退出循环
while:有条件的控制语句【注:repeat先执行后判断;while先判断后执行】
11.7,事件调度器【时间触发器】
优势:MySQL事件调度器部署在数据库内部由DBA或专人统一维护和管理,避免将一些数据库相关的定时任务部署在操作系统层,减少操作系统管理员产生误操作的风险,对后续的管理和维护也非常有益,例如,后续进行数据库迁移时无需在迁移操作系统层的定时任务,数据库迁移本身已经包含了调度事件的迁移
试用场景:事件调度器适用于定期收集统计信息,定期清理历史数据,定期数据库检查
注意事项:在繁忙且要求性能的数据库服务器上要慎重部署和启用调度器;过去复杂的处理更适合使用程序实现;开启和关闭需要root权限

猜你喜欢

转载自blog.csdn.net/qq_31424153/article/details/84032589
今日推荐