语法格式:
CREATE [DEFINER = { user | CURRENT_USER }] EVENT #定义用户为指定用户或当前用户。
[IF NOT EXISTS] <event_name> #创建的event名字(唯一确定的)。
ON SCHEDULE <schedule> #计划任务,决定event的执行时间和频率(注意时间一定要是将来的时间,过去的时间会出错),有两种形式AT和EVERY。
[ON COMPLETION [NOT] PRESERVE] #默认是ON COMPLETION NOT PRESERVE,即计划任务执行完毕后自动drop该事件;ON COMPLETION PRESERVE 则不会drop掉。
[ENABLE | DISABLE] #设定event的状态,默认ENABLE:表示系统尝试执行这个事件,DISABLE:关闭该事件,可以用alter修改。
[GLOBAL | LOCAL] #GLOBAL表示各节点独占执行,LOCAL表示各节点独立执行。
[COMMENT 'comment' ] #注释,最大长度64 个字节。
DO event_body; #需要执行的sql语句(可以是复合语句)。CREATE EVENT在存储过程中使用是合法的。
其中,
schedule:
AT timestamp [+ INTERVAL interval] ... | EVERY interval [STARTS timestamp [+ INTERVAL interval] ...][ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity { YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND }
值得注意的点:
1、创建事件是存储在库内,可以是当前库或指定库;
2、立即执行事件,执行完后,事件会自动删除
,多次调用事件或等待执行事件可查看到;
3、若两个事件同时刻调用,gbase会确定调用他们的顺序,如果要指定顺序,需要确保一个事件至少在上一个事件1s后执行;
4、对于递归调度的事件,结束日期不得提前于开始日期;
5、创建事件时不支持load语句;
6、event不支持procedure、function、trigger等对象的创建。
举例:
创建测试表:
gbase> DROP TABLE IF EXISTS events_list;
gbase> CREATE TABLE events_list(event_name VARCHAR(20) NOT NULL, event_started TIMESTAMP NOT NULL);
创建事件 1(立即启动事件):
CREATE EVENT event_now ON SCHEDULE AT NOW() DO insert into events_list values('event_now', now());
查看事件执行结果:
gbase> select * from events_list;
+------------+---------------------+
| event_name | event_started |
+------------+---------------------+
| event_now | 2017-07-01 04:06:40 |
+------------+---------------------+
创建事件 2(每分钟启动事件):
CREATE EVENT test.event_minute ON SCHEDULE EVERY 1 MINUTE DO insert into events_list values('event_now', now());
查看事件执行结果:
gbase> SELECT * FROM events_list;
+-------------+---------------------+
| event_name | event_started |
+-------------+---------------------+
| event_now | 2017-07-01 04:26:53 |
| event_now | 2017-07-01 04:27:53 |
| event_now | 2017-07-01 04:28:53 |
+-------------+---------------------+




