mysql高级:event触发器

基本概念


    从Mysql5.1版本开始引入Event概念。既“时间触发器”,与trigers的时间出发不同,event类似于linux croutad计划任务,用于时间出发。通过单独或调用procedure存储过程使用,在某一特定的时间点,触发相关的sql语句或存储过程。


适用范围


    对于每个一段时间就有固定需求的操作,如创建表、删除数据等操作,可以使用event来处理。


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


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




查看event命令有如下几种:
    
    1.查询mysql.event表
    2.通过 show events 命令
    3.通过 show full events 命令
    4.通过查询information_schema.events表
    5.show create event


基本语法:


    开启定时器
        要使event起作用,mysql的常量global event_scheduler必须为on或者是1.


        --查看是否开启定时器
        show variables like 'event_scheduler';


        --开启定时器0:off | 1:on
        set global event_scheduler = 1;


        当关闭时间计划进程的时候,不会有新的事件执行,但现有的正在运行的事件会执行到完毕。


        ** event所有操作会记录在binlog,所以做主从同步时,master主库应该开启event,而slave从库应该关闭event。


    创建事件


        create event语法如下:
            create event
            # 在同名event不存在时创建
            [IF NOT EXISTS]         // 


            # event名字,必须是当前db中唯一的。
            # 通常命名以 动作名称_(into/from)_表名_time 为规范
            event_name
            
            # 计划任务, 有2种设定方式
            # 1.时间戳,用来完成单次任务。
            # 2.every时间(单位)的数量时间单位[starts时间戳][ends时间戳],用来完成重复的计划任务。
            # 
            # 两种计划任务中,时间戳可以是任意的timestamp和datetime数据类型,时间戳需要大于当前时间。
            # 在重复的计划任务中,时间(单位)的数量可以是任意非空(NOT NULL)的整数式
            #   时间单位是关键词:YEAR、MONTH、DAT、HOUR、MINUTE、second


            # --其他的时间单位也是合法的如:QUARTER,WEEK,YEAR_MONTH,DAY_HOUR,,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。
            ON SCHEDULE schedule
            
            # 表示"当这个时间不会再发生时候",既当单次计划任务执行完毕后或当重复性的计划任务执行到了ends阶段。而preserve的作用是使事件在执行完毕后不会drop掉,建议使用该参数,以便于查看EVENT具体信息。


            # 参数enable和disable表示设定事件的状态。
            # enable表示系统将执行这个事件。
            # disable表示系统不执行该事件。


            # 可以用如下命令关闭或开启事件:
            # alter event event_name enable/disable 
            [ON COMPLETION [NOT] PRESERVE [ENABLE | DISABLE]]


            # 注释会出现在元数据中,它存储在information_schema表的comment列,最大长度64字节。
            [COMMENT 'comment']


            # 表示该event需要执行的sql语句或存储过程。
            # 语句可以是复合语句(begin sql end)。
            DO sql_statement


            * 在复合语句中是不可以使用如下语句的
                LOCK TABLES
                UNLOCK TABLES
                CREATE EVENT
                ALTER EVENT
                LOAD DATA




            实例:
            delimiter |
 
            CREATE EVENT e_daily
                ON SCHEDULE
                  EVERY 1 DAY
                COMMENT 'Saves total number of sessions then clears the table each day'
                DO
                  BEGIN
                    INSERT INTO site_activity.totals (time, total)
                      SELECT CURRENT_TIMESTAMP, COUNT(*)
                        FROM site_activity.sessions;
                    DELETE FROM site_activity.sessions;
                    CALL DEL();
                  END |
             
            delimiter ;


    修改事件:


        ALTER EVENT event_name
        ON SCHEDULE schedule
        [RENAME TO new_event_name]
        [ON COMPLETION [NOT] PRESERVE]
        [ENABLE | DISABLE]
        [COMMENT 'comment']
        DO sql_statement


    删除事件:


        DROP EVENT [IF EXISTS] event_name





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值