首先我们创建一张表tb_person
作为测试表(可以使用图形化界面或者sql语句):
CREATE TABLE `tb_person` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`p_name` char(20) DEFAULT NULL COMMENT '姓名',
`p_sex` char(10) DEFAULT NULL COMMENT '性别',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
然后就可以来测试一下mysql的定时任务到底该怎么操作,ok,开搞!
我的本地mysql版本使用了最新的mysql 8.0.11
.
1、首先检查是否开启了定时任务
mysql>show variables like 'event_scheduler';
Value = ON
表示已经开启了定时任务(MySQL 8.0.11是默认开启的),ok,其他版本如果没有开启怎么办?当然可以设置,在MySQL的配置文件my.ini
中添加如下一行:
[mysqld]
event_scheduler=ON /*这一行加入 mysqld 标签下*/
接下来就是重点:
2、创建存储过程
什么是存储过程?可以参考mysql存储过程详细教程
学习完之后可以使用如下语句来创建:本次我们来模拟一个新增操作
mysql>CREATE PROCEDURE p_test() /*创建存储过程p_test以备后续调用*/
BEGIN
insert into tb_person (name,sex,gmt_create) values("bearPotMan","男",now());/*要执行的语句,可以还有其他操作语句,比如update等*/
END;
3、设置定时任务调用这个存储过程
创建一个事件event
来调用上面创建好的存储过程:
mysql>CREATE EVENT e_test /*创建事件e_test*/
ON SCHEDULE EVERY 1 second STARTS TIMESTAMP '2018-06-29 00:42:00'/*从2018-06-29 00:42:00这个时间开始每一秒*/
ON COMPLETION PRESERVE /*表示创建后即时生效,或者可以使用 ON COMPLETION PRESERVE DISABLE 表示创建后不用即时生效,可以结合上一条语句看是否需要即时生效*/
DO
BEGIN
CALL p_test();/*调用之前创建好的存储过程*/
END;
如果设置了ON COMPLETION PRESERVE DISABLE
,可以使用下面的语句来开始定时任务:
alter event e_test on completion preserve enable;/*开启定时任务*/
4、关闭定时任务
ok,最后来说一下怎么来关闭定时任务,其实就一条语句的事:
alter event e_test on completion preserve disable;/*关闭定时任务*/
ok,去执行查询语句看一下效果吧!是不是又get到一个新技能。。。
我是
bearPotMan
,一个经验不足的十八线演(码)员(农)。
Know everything,control everything!