MySQL的定时任务主要通过履行SQL语句来实现。可使用CRON表达式或事件调度器(如InnoDB事件调度器)来设置定时任务。

mysql定时任务每天固定时间执行-mysql定时任务

1、 使用CRON表达式可以通过使用`CREATE EVENT`语句来创建一个事件,然后在触发器中定义履行的SQL语句。例如

```sql

CREATE EVENT event_name

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE DO

BEGIN

INSERT INTO table_name (column1, column2)

VALUES ('value1', 'value2');

END;

```

这个例子将在每5分钟履行一次INSERT语句。

2、 使用事件调度器MySQL的InnoDB存储引擎支持事件调度器。可以通过以下步骤创建一个定时任务

- 打开MySQL命令行并登录到数据库;

- 创建一个表来存储事件(例如,`CREATE TABLE events (

id INT NOT NULL AUTO_INCREMENT,

name VARCHAR(255) NOT NULL,

description TEXT NOT NULL,

scheduled_time DATETIME NOT NULL,

handler_name VARCHAR(255),

handler_class VARCHAR(255),

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;`);

- 在`handler_name`和`handler_class`字段中指定要履行的处理程序名称和类名(例如,`SET @handler = 'com.example.MyHandler'`);

- 将处理程序添加到脚本文件中,并确保它包括`run()`方法;

- 在MySQL命令行中运行以下命令来创建事件

```bash

CREATE EVENT event_name

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE

DO

BEGIN

SET @handler = 'com.example.MyHandler';

execute @handler.run();

END;

```

3、 定时任务的其他选项还可使用MySQL的内置函数和系统变量来控制定时任务的行动。例如,可使用`date_sub()`函数来调剂时间间隔,或使用`set`语句来更改处理程序的行动。

如何写mysql的定时任务

mysql的定时任务一般用event(事件)来完成,触发器无法完成。

一、通过mysql的命令行客户端来完成

1、set global event_scheduler =1; //开启event_scheduler

执行这个语句如果出现,可在mysql的配置文档中设置[mysqld]段中添加 event_scheduler=ON

如果重启mysql;这种情况下依然出错,Error Code: 1290. The MySQL server is running with the --event-scheduler=DISABLED

or --skip-grant-tables option so it cannot execute this statement,这个错误是说启动服务器时如果指定了--skip-grant-tables选项,则event_scheduler则自动被设置为DISABLED。命令行或配置文件的设置都会被覆盖。建议重现安装mysql或是修改启动参数(在系统服务中指定)。

查看event_scheduler状态show status like '%event%'; 或SELECT @@event_scheduler;

2、CREATE PROCEDURE Mypro() //创建存储过程

BEGIN

update userinfo SET endtime = now() WHERE id = '155';

END;

3、创建event My_enevt,每隔三十秒执行一次

create event if not exists e_test

on schedule every 30 second

on completion preserve

do call Mypro();

4、关闭事件

alter event e_test ON COMPLETION PRESERVE DISABLE;

5、开启事件

alter event e_test ON COMPLETION PRESERVE ENABLE;

语法

CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION

[NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement;

schedule: AT TIMESTAMP [+ INTERVAL INTERVAL] | EVERY INTERVAL [STARTS TIMESTAMP]

[ENDS TIMESTAMP] INTERVAL: quantity {YEAR | QUARTER | MONTH | DAY | HOUR |

MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND |

HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

mysql要实现定时执行sql语句就要用到Event

具体操作如下

先看看看event 事件是否开启

show variables like '%sche%';

如没开启,则开启。需要数据库超级权限

set global event_scheduler =1;

创建存储过程 update_a(注就是你要执行的sql语句)

mysql> create procedure update_a() update a set a.y_avg=(select avg(b.youhao) from b where a.a_id=b.a_id);

创建一个定时任务event e_updateA

mysql> create event if not exists e_updateA

-> on schedule every 60 second---设置60秒执行一次

-> on schedule at date_add(now(),interval 1 minute) ---在一分钟后执行

-> on completion preserve

-> do call update_a();---执行update_a()存储过程

创建Event之后,sql语句就定时执行一次。

关闭事件任务

mysql> alter event e_updateA ON

-> COMPLETION PRESERVE DISABLE;

开启事件任务

mysql> alter event e_updateA ON

-> COMPLETION PRESERVE ENABLE;

如还有问题再联系我

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。