一、使用过程1.查看当前是否已开启事件计划(调度器)有3种方法:

SHOW VARIABLES LIKE 'event_scheduler';

SELECT @@event_scheduler;

SHOW PROCESSLIST;

2. 开启事件计划(调度器)开关有4种方法:

SET GLOBAL event_scheduler = 1;

SET @@global.event_scheduler = 1;

SET GLOBAL event_scheduler = ON;

SET @@global.event_scheduler = ON;

键值1或者ON表示开启;0或者OFF表示关闭;

3.关于事件计划的权限:

单独使用event调用SQL语句时,查看和创建需要用户具有event权限,调用该SQL语句时,需要用户具有执行该SQL的权限。Event权 限的设置保存在mysql.user表和mysql.db表的Event_priv字段中。(FLUSH PRIVILEGES;)

当event和procedure配合使用的时候,查看和创建存储过程需要用户具有create routine权限,调用存储过程执行时需要使用excute权限,存储过程调用具体的SQL语句时,需要用户具有执行该SQL的权限。

SELECT HOST,USER,Event_priv FROM mysql.user;

获取当前登陆的用户和数据库:SELECT CURRENT_USER(), SCHEMA();

从Figure1可以知道bfsql@%是没有Event_priv权限的,在该用户下创建事件的时候会出现下面的错误:

Error Code: 1044Access denied for user 'bfsql'@'%' to database 'blog'

如果出现上面的错误,执行下面的SQL就可以给bfsql@%赋予创建Event的权限:

UPDATE mysql.user SET Event_priv = 'Y' WHERE HOST='%' AND USER='bfsql';

FLUSH PRIVILEGES;

最后,你可以通过SHOW GRANTS FOR 'bfsql'@'%';查看所有权限;

4.创建事件:

(1)创建事件的语法如下:

CREATE EVENT [IF NOT EXISTS] event_name

ON SCHEDULE schedule

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE]

[COMMENT 'comment']

DO sql_statement

(2)创建事件的示例如下:

DELIMITER $$

CREATE EVENT IF NOT EXISTS e_blog

ON SCHEDULE EVERY 30 SECOND

ON COMPLETION PRESERVE

DO BEGIN

CALL MoveBlogData();

END$$

DELIMITER ;

DO sql_statement字段表示该event需要执行的SQL语句或存储过程。这里的SQL语句可以是复合语句,使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。

--从现在开始每隔九天定时执行

CREATE EVENT EVENT1

ON SCHEDULE EVERY 9 DAY STARTS NOW()

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL TOTAL();

END

--每个月的一号凌晨1 点执行

CREATE EVENT EVENT2

ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL STAT();

END

---每个季度一号的凌晨2点执行

CREATE EVENT TOTAL_SEASON_EVENT

ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL SEASON_STAT();

END

--每年1月1号凌晨四点执行

CREATE EVENT TOTAL_YEAR_EVENT

ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL YEAR_STAT();

END

5.事件开启与关闭:

开启某事件:

ALTER EVENT e_test ON COMPLETION PRESERVE ENABLE;

关闭某事件:

ALTER EVENT e_test ON COMPLETION PRESERVE DISABLE;

二、实例:mysql定时器是系统给提供了event,而oracle里面的定时器是系统给提供的job。废话少说,下面创建表:

create table mytable (

id int auto_increment not null,

name varchar(100) not null default '',

introduce text not null,

createtime timestamp not null,

constraint pk_mytable primary key(id)

)

创建存储过程,这里的存储过程主要提供给mysql的定时器event来调用去执行:

create procedure mypro()

BEGIN

insert into mytable (name,introduce,createtime) values ('1111','inner mongolia',now());

end;

这里只是简单的写了一下,只是为了说明例子。

紧接着创建mysql的定时器event:

create event if not exists eventJob

on schedule every 1 second

on completion PRESERVE

do call mypro();

这里设置为每一秒执行一次

至此所有的准备工作已经写完了,做完这些,mysql要想利用定时器必须的做准备工作,就是把mysql的定时器给开启了:

SET GLOBAL event_scheduler = 1; -- 启动定时器

SET GLOBAL event_scheduler = 0; -- 停止定时器

紧接着还要开启事件:

ALTER EVENT eventJob ON COMPLETION PRESERVE ENABLE; -- 开启事件

ALTER EVENT eventJob ON COMPLETION PRESERVE DISABLE; -- 关闭事件

SHOW VARIABLES LIKE '%sche%'; -- 查看定时器状态

至此,你去数据库里面的表mytable里面看下,系统会每隔一秒去插入一条数据,嘻嘻,任务完成了。

select * from mytable

本文标题: 逐步讲解MySQL中定时事件计划的创建

本文地址: http://www.cppcns.com/shujuku/mysql/148942.html

mysql事件计划自动_逐步讲解MySQL中定时事件计划的创建相关推荐

  1. mysql的原理图解_图文并茂讲解Mysql事务实现原理

    开篇 相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等.今天想跟大家一起研究下事务 ...

  2. mysql 执行计划 视频_实战讲解MySQL执行计划,面试官当场要了我

    全是干货的技术号: 本文已收录在github,欢迎 star/fork: explain或者desc获取MySQL如何执行select语句的信息. 结果包含很多列 1 各列字段说明 1.1 id SE ...

  3. mysql事件调度定时任务_详解MySQL用事件调度器Event Scheduler创建定时任务

    前言 事件调度器相当于操作系统中的定时任务(如:Linux中的cron.Window中的计划任务),但MySql的事件调度器可以精确到秒,对于一些实时性要求较高的数据处理非常有用. 1. 创建/修改事 ...

  4. mysql 行锁 超时_技术分享 | MySQL 行锁超时排查方法优化

    作者:xuty 本文来源:原创投稿 * 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.大纲 #### 20191219 10:10:10,234 | com.ali ...

  5. mysql 表结构监控_性能测试之mysql监控、优化

    共享表空间还有一个缺点就是不能自动收缩,自动收缩是什么意思呢,刚建表的时候,表里面数据很少,就1条数据,可能占用空间就几kb,到后来数据多了,占用了10个G的空间,然后发现有一些数据都是垃圾数据,删了 ...

  6. 操作 mysql 不生成日志_详解MySQL的日志

    MySQL日志 MySQL的日志记录了MySQL的日常操作和错误信息,通过这些日志我们可以知道MySQL内部发生的事情,可以为MySQL的优化和管理提供必要的信息. MySQL的日志主要有:二进制日志 ...

  7. 用来测试的mysql建表语句_软件测试基础——MySQL建库、建表SQL语句

    一.对库的操作 创建库:create database 库名 ; 创建指定字符集的库:create database 库名 charset=utf8; 创建指定字符集并带校验规则的库:create d ...

  8. mysql网络投票系统设计_分享PHP+MySQL投票系统的设计和实现

    PHP+MySQL是初学者开发的简单操作系统.PHP+MySQL系统是一个基于网络的网站投票程序.下面成都人的seo技术频道编辑介绍共享PHP+MySQL投票系统的设计与实现.让我们看看 数据库设计 ...

  9. 阿里云 mysql 导出数据库备份_导出整个mysql数据库备份

    mysql和mssql的备份和恢复数据的方法 mysql数据库的备份方法可以用 导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] ...

最新文章

  1. 代码对比与文件对比的一个简单方法
  2. 成功解决model_selection\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in
  3. 基于ZF网络的Faster RCNN网络结构详解(非常详细版)
  4. 【2012百度之星/初赛下】A:度度熊就是要刷排名第一
  5. 【bzoj2850】巧克力王国 KD-tree
  6. Natasha 4.0 探索之路系列(四) 模板 API
  7. Jekins持续集成在ERP研发中的应用实践
  8. Receiver type ‘X’ for instance message is a forward declaration
  9. linux无缝升级的版本,Angular 1 和 Angular 2 集成:无缝升级的方法
  10. C# UDP通讯实例
  11. 多读少写的场景 如何提高性能
  12. Ubuntu 启动图标变成问号
  13. XJTU 新闻英语阅读unit1作业答案
  14. 喻文强的加入购物车效果(完整版,仅供参考)
  15. Kali 如何放大字体与图标
  16. 计算机显示器的ppt,计算机硬之显示器.ppt
  17. 如何加速香港主机运行系统
  18. 富士康服务器linux运维,【2019IT运维十大样板工程】富士康云桌面及智能运维项目...
  19. Consumer接口和Supplier接口
  20. STM32读取DHT11中时序的问题,通过逻辑分析仪读取信号

热门文章

  1. 理解Flex itemRenderer(3)--通信
  2. 矩阵求导公式,及MathJax公式编辑
  3. ASP.NET MVC 线程和并发
  4. There are no packages available for install
  5. 利用JavaScript选择GridView行
  6. Python编译成C语言,性能有多暴力?
  7. RabbitMQ中的消息确认ACK机制
  8. 一图看懂py2/py3编码
  9. win7 64位安装redis 及Redis Desktop Manager使用
  10. 《大型网站技术架构》读书笔记之八:固若金汤之网站的安全性架构