【项目实战】如何在关系型数据库(Oracle、MySQL)中创建定时任务
一、背景描述
关系型数据库如MySQL、Oracle、SQL Server、PostgreSQL等都支持定时任务的机制,
具体实现方法可能会有所不同,请根据实际情况选择合适的方法。
二、在Oracle中创建定时任务
下面以创建一个每天凌晨3点钟执行的定时任务为实例。
2.1 创建定时任务
PRO_JOB是你要执行的存储过程名称,多个存储过程已分号分割,注意最后面也有一个分号。
2.2 查询定时任务
2.3 手动执行定时任务
2.4 任务重复运行间隔设计
2.4.1 在特定时间间隔后,重复运行该任务
SYSDATE+n’,n泛指一个以天为单位的时间间隔.eg:
描述 | Interval参数值 |
---|---|
每天运行一次 | SYSDATE+1 |
每小时运行一次 | SYSDATE+1/24 |
10分钟运行一次 | SYSDATE+10/(60X24) |
每30秒运行一次 | SYSDATE+30/(60X24X60) |
每星期运行一次 | SYSDATE+7 |
注:此任务表达式不能保证任务的下一次运行时间在特定的日期或者时间
只能够指定一个任务两次运行之间的时间间隔。
2.4.2 在特定的日期和时间运行任务
定时到特定日期或时间的任务,eg:
描述 | Interval参数值 |
---|---|
每天午夜12点 | TRUNC(SYSDATE+1) |
每天早上8点30分 | TRUNC(SYSDATE+1)+(8X60+30)/(24X60) |
三、在MySQL中创建定时任务
要在MySQL中创建定时任务,一种常用的做法是使用MySQL提供的事件(Event)机制。即可以使用Event语句。
MySQL事件是一种可以定期执行指定SQL语句的机制,类似于操作系统中的计划任务(Cron Job)。
3.1 创建一个每天凌晨1点执行一次的定时任务
以下是在MySQL中创建一个每天凌晨1点执行一次的定时任务的示例:
3.1.1 编写事件
CREATE EVENT my_event
ON SCHEDULE EVERY 1 DAY STARTS '2022-04-08 01:00:00'
DO
-- 执行需要执行的SQL语句
这个语句将创建一个名为my_event的事件,它将在每天凌晨1点开始执行。
通过在DO关键字后添加需要执行的SQL语句,就可以实现定时执行任务的功能。
3.1.2 启动MySQL事件调度程序
当然,在创建事件之前,需要先开启MySQL事件调度器,可以通过以下命令进行开启:
SET GLOBAL event_scheduler = ON;
并且确保当前用户具有创建事件的权限。
3.2 创建一个每天午夜运行存储过程的事件
以下是一个示例,演示如何创建一个每天午夜运行存储过程的事件:
3.2.1 编写事件
CREATE EVENT my_event
ON SCHEDULE
EVERY 1 DAY
STARTS '2022-01-01 00:00:00'
DO
CALL my_stored_procedure();
这段代码创建了一个名为my_event的事件,它每天运行一次(EVERY 1 DAY),从2022年1月1日午夜开始(STARTS ‘2022-01-01 00:00:00’)。该事件执行存储过程my_stored_procedure()。
3.2.2 创建存储过程
要创建存储过程,您可以使用CREATE PROCEDURE语句。
以下是一个示例,演示如何创建一个更新表的存储过程:
CREATE PROCEDURE my_stored_procedure()
BEGIN
UPDATE my_table SET my_column = 'new_value';
END
这段代码创建了一个名为my_stored_procedure()的存储过程
它通过将my_column的值设置为’new_value’来更新名为my_table的表。
3.2.3 启动MySQL事件调度程序
一旦您创建了事件和存储过程,就可以通过运行以下命令启动MySQL事件调度程序:
SET GLOBAL event_scheduler = ON;
这将启用事件调度程序,它将在指定的时间间隔内执行事件。
相关文章
- MySQL主从复制
- 实现Oracle,Mysql,SqlServer数据库的codefirst的操作
- 一天一个mysql函数(二) FIND_IN_SET()
- 01 MySQL锁概述
- MySQL运维---MySQL优化
- 【原创】MySQL Proxy - read_auth_result()
- mysql中的日期转换函数(类似oracle中的to_date)
- Mac 卸载MySql的方法
- MySQL使用SQL实现Oracle Rank函数功能
- MySQL · 答疑解惑 · InnoDB 预读 VS Oracle 多块读
- PostgreSQL 自带自增字段 请勿使用触发器或其他手段生成(Like Oracle, MySQL)
- mysql数据向Redis快速导入
- Mysql中用between...and...查询日期时注意事项
- Atitit 为什么oracle这类大型数据库比mysql的性能机制目录1. 分区机制差别 11.1. Join算
- Atitit 视图参数解决方案 oracle版和mysql版本 attilax总结.docx
- Atitit 视图参数解决方案 oracle版和mysql版本 attilax总结.docx
- sql中datetime日期类型字段比较(mysql&oracle)
- Python可视化数据分析09、Pandas_MySQL读写
- db2,oracle,mysql ,sqlserver限制返回的行数
- MySQL 模拟Oracle邻接模型树形处理
- MySQL 索引
- 【大数据开发运维解决方案】sqoop增量导入oracle/mysql数据到hive时时间字段为null处理