MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务(二)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务(二)

三、存储函数


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表看定时任务是否启动!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
存储 关系型数据库 MySQL
MySQL是怎样存储数据的?
MySQL是怎样存储数据的?
|
4天前
|
SQL 关系型数据库 MySQL
MySQL第三战:CRUD,函数1以及union&union all
MySQL第三战:CRUD,函数1以及union&union all
|
11天前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
12天前
|
存储 关系型数据库 MySQL
MySQL 格式化日期函数 DATE_FORMAT(), FROM_UNIXTIME() 和 UNIX_TIMESTAMP() 之间区别
MySQL 格式化日期函数 DATE_FORMAT(), FROM_UNIXTIME() 和 UNIX_TIMESTAMP() 之间区别
|
13天前
|
关系型数据库 MySQL 数据库
【MySQL】:高效利用MySQL函数实用指南
【MySQL】:高效利用MySQL函数实用指南
10 0
|
13天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在DataWorks中,使用JSON解析函数将MySQL表中的字段解析成多个字段将这些字段写入到ODPS(MaxCompute)中如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
27 3
|
24天前
|
存储 SQL 关系型数据库
MySQL job 定时任务
MySQL job 定时任务
|
25天前
|
关系型数据库 MySQL
MySQL 常用函数
MySQL 常用函数
|
1月前
|
关系型数据库 MySQL 数据处理
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
轻松入门MySQL:数据库之触发器,自动守护你的数据宝库(17)
|
2月前
|
关系型数据库 MySQL
Mysql基础第二十八天,使用触发器
Mysql基础第二十八天,使用触发器
29 0
Mysql基础第二十八天,使用触发器