Mysql数据库——每天的9点到11点,每隔1分钟执行一次存储过程

本文详细介绍了如何利用Mysql事件、Linux crontab和shell脚本实现特定时间段内的定时任务,包括每天9点到11点每分钟执行一次存储过程的具体步骤。

思路分析:

1、看到这个需求,最先想到的是使用Mysql的Event事件做一个定时任务

2、但是写定时任务时发现,某一天9点到11点每隔一分钟执行一次存储过程很容易,但是再加上每天的9点到11点,仅仅用Mysql的事件就做不到了。可能有很多小伙伴会说,我写个嵌套事件就可以了,写法为每隔一天的1点作为大事件,大事件执行的是当天的9点到11点的小事件,思路是对的,但是mysql不支持事件中创建事件,所以这个思路的大门被关闭了

3、最终想了一个办法是:先写一个创建事件的sql:当天的9点到11点每隔一分钟执行一次存储过程。然后再使用linux的crontab 每天的8:30定时执行sheel脚本来执行这个sql,这样就可以实现以上功能了

sql及sheel脚本:

1、首先,在数据库所在的服务器上创建一个Sheel脚本,我是在用户目录下创建了一个sh的目录(mkdir sh)。然后在sh目录下创建db_fx_life_sql.sh(touch db_fx_life_sql.sh,注意:创建文件后要授权执行权限:chmod 744 shu.sh,否则脚本将无法执行),脚本内容如下:

#!/bin/sh
user=fx_life
pass=FX_life_dev_!@34
db=db_fx_life_dev
mysql -u$user -p$pass -D $db < /home/fx_life/sh/signEvent.sql

2、其次,在同目录下创建要执行的sql文件(touch signEvent.sql),sql中是创建事件的脚本,内容如下:

DROP EVENT if exists stage_sign_in_event1;
            CREATE EVENT stage_sign_in_event1
            on schedule every 60 second STARTS DATE_ADD(CURDATE(), INTERVAL 9 HOUR) ENDS DATE_ADD(CURDATE(),              INTERVAL 11 HOUR)
            on completion preserve 
            do call insert_stage_sign_in_dynamic(FLOOR(1 + (RAND() * 101)));

3、最后,使用crontab -e命令编辑linux 定时任务:

30 8 * * * /home/fx_life/sh/db_fx_life_sql.sh

规则是:每天的8:30执行一次sheel脚本,这个时间设置有点类似于quartz的时间设置,但又不完全相同:  

依次为:分钟,小时,日,月,星期。

编辑好了之后以:wq方式保存,跟vim编辑器保存方式相同。

番外:

实现这个功能还有一个思路是写一个事件,事件规则为从现在开始每隔一分钟执行一次存储过程,而存储过程要改一下,在存储过程中加一个判断,判断被调用的时间是不是在9点到11点之间,如果是就执行原来存储过程的内容,如果不是就不执行。但是这么写有个弊端就是事件会一直在执行,这会在无形中给数据库带来压力。

实现这个功能参考的资料为:

1、linux crontab定时及sheel脚本博客:https://www.linuxidc.com/Linux/2017-09/146893.htm

2、mysql定时事件博客:https://www.cnblogs.com/itfenqing/p/6884650.html

 

### 回答1数据库定时任务是指在数据库中设置一个自动运行的任务,根据设定的时间间隔定期执行某个操作。当需要对某个字段进行定时更新时,可以通过编写SQL语句并使用定时任务实现自动更新某个字段的功能。 首先,需要创建一个定时任务,可以使用数据库自带的定时任务工具或者操作系统的定时任务功能。在定时任务中,可以指定一个时间间隔,比如每隔一小时执行一次。 然后,在定时任务中编写SQL语句,用于更新要操作的字段。可以使用UPDATE语句来更新某个字段的值。例如,假设要更新一个表中的某个字段,可以使用以下SQL语句: ``` UPDATE 表名 SET 字段名 = 新值 WHERE 条件; ``` 其中,表名是要更新的表的名称,字段名是要更新的字段的名称,新值是要更新的字段的新值,条件是限定更新的条件。 接着,将编写好的SQL语句插入到定时任务中,并设置好定时任务的执行时间间隔。定时任务会在指定的时间间隔内自动执行,根据SQL语句更新相应的字段。 需要注意的是,定时任务更新字段时,需要确保定时任务的执行时间不会影响数据库的正常运行,避免对数据库的性能产生负面影响。 通过以上步骤,就可以实现使用SQL设置定时任务,每隔一段时间自动更新某个字段的功能。定时任务会按照设定的时间间隔自动执行SQL语句,更新对应字段的值,从而实现自动化更新的效果。 ### 回答2: 数据库定时任务可以使用SQL设置每隔一段时间自动更新某个字段。一种常见的方法是使用数据库定时任务功能,比如MySQL中的事件(Event)或者PostgreSQL中的定时器(Timer)。下面以MySQL事件为例,详细说明如何实现。 首先,我们需要创建一个事件,来执行自动更新操作。可以使用以下SQL语句创建一个名为"update_event"的事件: ```mysql CREATE EVENT update_event ON SCHEDULE EVERY 1 HOUR DO UPDATE 表名 SET 字段名 = 新值 WHERE 条件; ``` 上述SQL语句中,我们创建了一个名为"update_event"的事件,它每隔1小时就会执行一次。在"DO"后的语句中,我们使用"UPDATE"命令来更新指定的表和字段。可以根据需要修改表名、字段名和条件等内容。 接下来,可以使用以下语句启用事件调度器: ```mysql SET GLOBAL event_scheduler = ON; ``` 这样,在启用事件调度器后,事件"update_event"将会按照预定的时间间隔自动执行更新操作。 需要注意的是,具体的实现方式依赖于所使用的数据库管理系统,不同的数据库可能有不同的语法和设定。还要考虑到数据量的大小和性能的影响,以及定时任务的具体需求,选择合适的定时任务方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值