设为首页 收藏本站
查看: 1132|回复: 0

[经验分享] mysql 创建事件

[复制链接]

尚未签到

发表于 2017-12-11 20:59:13 | 显示全部楼层 |阅读模式
  mysql 事件说明:
  创建事件
  CREATE EVENT 的语法如下:
  CREATE EVENT
[IF NOT EXISTS] ---------------------------------------------*标注1

  event_name -----------------------------------------------------*标注2
  ON SCHEDULE schedule ------------------------------------*标注3
[ON COMPLETION [NOT] PRESERVE] -----------------*标注4

[ENABLE | DISABLE] ----------------------------------------*标注5

[COMMENT 'comment'] --------------------------------------*标注6

  DO sql_statement -----------------------------------------------*标注7
  说明:
  标注1:[IF NOT EXISTS]
  使用IF NOT EXISTS,只有在同名event不存在时才创建,否则忽略。建议不使用以保证event创建成功。
  标注2:event_name
  名称最大长度可以是64个字节。名字必须是当前Dateabase中唯一的,同一个数据库不能有同名的event。
  使用event常见的工作是创建表、插入数据、删除数据、清空表、删除表。
  为了避免命名规范带来的不便,最好让事件名称具有描述整个事件的能力。建议命名规则如下为:动作名称_(INTO/FROM_)表名_TIME,例如:
  1.     每月创建(清空/删除)fans表:  
  create(truncate/drop)_table_fans_month;
  2.     每天从fans表插入(删除)数据:
  insert(delete)_into(from)_fans_day;
  标注3:ON SCHEDULE
  ON SCHEDULE 计划任务,有两种设定计划任务的方式:
  1. AT 时间戳,用来完成单次的计划任务。
  2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。
  在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。
  在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。
  提示: 其他的时间单位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。
  标注4: [ON COMPLETION [NOT] PRESERVE]
  ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。
  标注5:[ENABLE | DISABLE]
  参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。
  可以用如下命令关闭或开启事件:
  ALTER EVENT event_name  ENABLE/DISABLE
  标注6:[COMMENT 'comment']
  注释会出现在元数据中,它存储在information_schema表的COMMENT列,最大长度为64个字节。'comment'表示将注释内容放在单引号之间,建议使用注释以表达更全面的信息。
  标注 7: DO sql_statement
  DO sql_statement字段表示该event需要执行的SQL语句或存储过程。这里的SQL语句可以是复合语句,例如:
  BEGIN
  CREATE TABLE test1;//创建表(需要测试一下)
  DROP TABLE test2;//删除表
  CALL proc_test1();//调用存储过程
  END
  使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。当然SQL语句是有限制的,对它的限制跟函数Function和触发器Trigger 中对SQL语句的限制是一样的,如果你在函数Function 和触发器Trigger 中不能使用某些SQL,同样的在EVENT中也不能使用。明确的来说有下面几个:
  LOCK TABLES
  UNLOCK TABLES
  CREATE EVENT
  ALTER EVENT
  LOAD DATA
  实例一: 创建事件,马上执行事件,调用存储过程。
  

CREATE EVENT if not exists Event_Stat_Daily  

on schedule EVERY 1 DAY  
on completion preserve
  
do call cp_Stat_VideoData();
  

  实例二:每天定时执行事件,调用存储过程。
  

CREATE EVENT Event_Stat_Daily  

ON SCHEDULE EVERY 1 DAY STARTS '2017-03-01 02:00:00'  
ON COMPLETION PRESERVE
  
ENABLE
  
DO call cp_Stat_VideoData();
  

  实例三:没调用方法或者存储过程,直接在事件里面逻辑操作。
  

DELIMITER |  
CREATE EVENT e5
  
ON SCHEDULE
  
EVERY 1 DAY
  
STARTS  '2017-03-01 02:00:00'
  
ON COMPLETION PRESERVE
  
DO
  
BEGIN
  
declare yestday date;
  
set yestday=date(date_add(NOW(), interval -1 day));

  
if exists(select>  
THEN
  
delete from Stat_VideoHits where AddDate=yestday;
  
end if;
  

  
insert into Stat_VideoHits(Id,VideoId,Times,AddDate) select uuid(), VideoId,COUNT(1),AddDate from Coll_VideoHits
  
where AddDate = yestday
  
group by VideoId;
  

  
DELETE from Sum_VideoHits;
  

  
insert into Sum_VideoHits(Id,VideoId,Times,UpdateDate) select uuid(),VideoId,sum(Times),now() from Stat_VideoHits
  
group by VideoId;
  

  
END |
  
DELIMITER ;
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-423143-1-1.html 上篇帖子: SSM框架整合(注解) 下篇帖子: mysql 5.7以上版本下载及安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表