三、存储函数
3.1、认识存储函数
存储函数:函数也是一组预先编译好的sql的集合,基本和存储过程相似。
对于存储函数与存储过程区别:
存储过程可以有0个,1个或多个返回值,适用于insert、update、delete操作。
函数只能有一个返回值,适用于在处理数据以后,返回一个已知的结果,使用return返回;在存储过程中需要对参数进行赋值操作。
3.2、创建存储函数
语法介绍
语法:
CREATE FUNCTION 函数名称(参数列表) RETURNS 返回类型 BINLOG参数 BEGIN 函数体 return xxx; END
参数列表:参数名称参数类型。
BINLOG参数:四个参数根据实际函数体来进行设定
NO SQL:函数体中没有sql语句,也不会改参数。
READS SQL DATE:函数体中存在sql语句,但是整个数据是只读的,不会修改数据。
MODIFIES SQL DATE :函数体中存在SQL语句,并且会修改数据。
CONTAINS SQL:函数体中包含有SQL语句。
函数体:在函数体汇总必须包含return语句,将return放在函数体最后一行执行
实例演示
目标功能:传入两个参数,将两个参数相加。
#写一个函数,用于求两数之和 DELIMITER $ CREATE FUNCTION sum_(input1 INT,input2 INT) RETURNS INT NO SQL -- 设置函数名称以及返回类型 BEGIN return input1+input2; END$
旁边是fx标志。
调用函数测试:
SELECT sum_(12,15)
3.3、查看函数
语法:SHOW CREATE FUNCTION 函数名
实际案例:查看上面创建的函数
SHOW CREATE FUNCTION sum_;
3.4、删除函数
语法:drop FUNCTION 函数名;
实际案例:删除上面创建的函数
drop FUNCTION sum_;
四、流程控制语句
3.1、选择结构
IF函数
就是一个简单函数
语法:IF(逻辑表达式,表达式1,表达式2)
功能:三目运算。
IF结构
功能:实现多路选择。
语法:
IF逻辑表达式 THEN 语句1; ELSEIF 逻辑表达式2 THEN 语句2; ... ELSE 语句n; ENDIF;
注意:只能用在BEGIN END结构体中,如应用在触发器、存储过程、存储函数中。
case结构
1、等值选择。
语法:
CASE 字段|变量|表达式 WHEN 值 THEN 值|语句 WHEN 值 THEN 值 ... ELSE 值 END
2、不等值选择
语法:
CASE WHEN 逻辑表达式 THEN 语句1 ... ELSE 语句n END
3.2、循环结构
while
语法:
WHILE 逻辑表达式 DO 循环体 END WHILE;
实际案例见讲义!
loop 功能:设置指定情况时跳出该循环标签。 -- Loopnaem是定义的循环名称,为了跳出循环时指定跳出的循环 loopname:LOOP; IF 逻辑表达式 THEN ... LEAVE loopname; -- 跳出当前指定的循环,类似于java中的break 标签 ENDIF; ENDLOOP;
REPEAT
语法:不就是java中的do while结构
REPEAT 循环体 UNTIL 逻辑表达式 -- 当满足逻辑表达式,跳出循环 ENDREPEAT;
实例依旧到讲义上看。
五、定时任务
5.1、认识定时任务
定时任务:用于生成日报,统计数据。将查出来的数据插入到报表中去。
用途:一般是半夜12点之后来计算前一天的数据。通过定时任务策略来去调用指定的函数。可以定时发送短信等操作。一般使用java写定时任务或者脚本写。
5.2、查看定时策略是否开启
查看是否开启:show variables like '%event_sche%';,默认是关闭的。
打开定时策略:set global event_scheduler=1;,设置1为开启,0为关闭。
5.3、创建定时任务
语法
语法:
create event 事件名 -- 创建事件名称 on schedule every 1 minute -- 策略为每一分钟 on completion preserve disable -- disable是不启动该定时任务 do call 调用函数; -- 定时调用的函数
第二行的策略分为多种;第三行可以选择是否启动该定时任务。
5.4、操作定时任务(查看、开启关闭、删除)
1、查看所有的定时任务
SELECT * FROM information_schema.EVENTS; -- 在information_schema数据库中的EVENTS表里面存储
2、开启或关闭定时任务
alter event 任务名 on completion preserve enable; -- 开启定时任务 alter event 任务名 on completion preserve disable; -- 关闭定时任务
3、删除定时任务
drop event 任务名;
5.5、定时规则(3种类型)
1、周期执行–关键字 EVERY
单位有:second、minute、hour、day、week(周)、quarter(季度)、month、year
示例:on schedule every 1 week
2、在具体某个时间执行–关键字 AT
on schedule at current_timestamp()+interval5day; -- 5天后执行 on schedule at'2019-01-0100:00:00'; -- 在2019年1月1日,0点整执行
3、在某个时间段执行–关键字STARTS ENDS,在指定的时间范围内
on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month; -- 5天后开始直至到一个月每天执行 on schedule every 1 day STARTS current_timestamp() ends current_timestamp()+interval 5 day; -- 从现在到之后5天每天都执行
注意:这里是将every、starts ends结合使用。
实际案例
案例描述:每秒钟插入一条记录到student表中。尽量将多个命令实际进行使用!
-- 1、查看定时策略是否开启 show VARIABLES like '%event_sche%'; -- 2、若是未开启,设置开启 set global event_scheduler=1; -- 3、创建定时任务 CREATE event inseve -- 创建事件名称 on schedule every 1 SECOND -- 策略为每一分钟 on completion preserve ENABLE -- disable是不启动该定时任务 do call insertStu('晓丽'); -- 定时调用的函数 -- 4、关闭定时任务 alter event inseve on completion preserve disable; -- 关闭定时任务 -- 5、删除指定定时任务 DROP EVENT inseve;
说明:过程中你可以去查看student表看定时任务是否启动!