mysql 触发器和任务事件(定时器任务事件)

触发器语法

查看触发器

show triggers;
CREATE TRIGGER <trigger_name>  
  
  BEFORE|AFTER
 
  INSERT|UPDATE|DELETE  ON <table_name> # 表名
  
  FOR EACH ROW  # 这句话在mysql是固定的
 
  BEGIN
 
  <触发的SQL语句>(调用NEW/OLD参数);
 
  END

举例

CREATE TRIGGER cfq1
  
  AFTER
 
  INSERT  ON  student
  
  FOR EACH ROW  
 
  BEGIN
 
  insert into student_point ( name, point)
        values( NEW.name, NEW.age);  -- NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据
 
  END

意思就是在给student表插入数据之后,自动在student_point表钟插入新数据的姓名和年龄。

定时任务事件语法

二、开启事件功能
先检查是否开启事件功能:

show variables like 'event_scheduler';
如果’event_scheduler’的值为 'ON’表示调度器已开启,'OFF’为调度器未开启

开启事件:set global event_scheduler = on;
关闭事件:set global event_scheduler = off;
查看任务 SHOW EVENTS;
这个是查看现有任务,如果有任务只执行一次的话,执行之前是可以看到的,执行之后就没有了就查不到了。

创建定时任务事件语法

CREATE
        [DEFINER = { user | CURRENT_USER }]
        EVENT
        [IF NOT EXISTS]
        event_name
        ON SCHEDULE schedule
        [ON COMPLETION [NOT] PRESERVE]
        [ENABLE | DISABLE | DISABLE ON SLAVE]
        [COMMENT 'comment']
        DO event_body; 

时间有很多种的,

on schedule every 1 second         -- 每秒执行1次
on schedule every 2 minute         -- 每两分钟执行1次
on schedule every 3 day            -- 每3天执行1次
ON schedule every 1 day starts date_add(date_add_curdate(), interval 1 day), interval 1 hour)  -- 每天凌晨1点执行
ON schedule every 1 month starts date_add(date_add(date_sub(curdatte(),interval day(curdate())-1 day),interval 1 month),interval 1 hour) -- 每个月的第一天凌晨1点执行

on schedule at current_timestamp()+interval 5 day     -- 5天后执行
on schedule at current_timestamp()+interval 10 minute -- 10分钟后执行
on schedule at '2016-10-01 21:50:00'                  -- 在2016年10月1日,晚上9点50执行
ON schedule EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK -- 每 3 个月,从现在起一周后开始
ON schedule  EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK -- 每十二个小时,从现在起三十分钟后开始,并于现在起四个星期后结束

on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month -- 5天后开始每天都执行执行到下个月底
on schedule every 1 day ends current_timestamp()+interval 5 day -- 从现在起每天执行,执行5天

举例:

创建一个1分钟后清空student_point表数据的事件 
CREATE EVENT IF NOT EXISTS dsq1
on schedule at current_timestamp()+interval 1 minute -- 1分钟后执行
DO 
TRUNCATE TABLE student_point;

创建一个每天凌晨1点执行的任务
CREATE EVENT my_event
ON SCHEDULE
EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
ON COMPLETION PRESERVE
DO
-- 这里是任务的具体操作,可以是SQL语句或存储过程
INSERT INTO my_table (column1, column2) VALUES ('value1', 'value2');
创建一个每隔3秒往test表中插入一条数据的事件 
CREATE EVENT IF NOT EXISTS e_test_1 
ON SCHEDULE 
EVERY 3 SECOND
ON COMPLETION PRESERVE
DO 
INSERT INTO test(id,t1) VALUES(NULL,NOW());

查看全部事件:

SHOW EVENTS;

删除事件:

DROP EVENT [IF EXISTS] event_name(事件名称);
例如:DROP EVENT event_name;

事件任务参考:https://blog.csdn.net/weixin_44816664/article/details/134206285
触发器参考:https://zhuanlan.zhihu.com/p/158670286

posted @ 2024-04-16 16:32  高柴小生  阅读(226)  评论(1编辑  收藏  举报