MySQL 이벤트 스케줄 러 간단 한 응용

1. MySQL 이벤트 스케줄 러 문법 설명
만 들 기, 수정, 보기 등 문법 참고 홈 페이지 문서 링크,http://dev.mysql.com/doc/refman/5.6/en/create-event.html이벤트 생 성 (CREATE 이벤트)
먼저 그것 의 문법 을 살 펴 보 자.
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;

schedule:
AT TIMESTAMP [+ INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]

INTERVAL:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
            WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
            DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

자세 한 설명:
①definer:   event   ,          ,          。
           , definer = current_user;
         definer,         :
    1.    super  ,              ,          。
    2.    super  ,            ;          ,          。
②if not exists:        ,     ,     。
③on schedule  :         ,         
  1)at timestamp           ,timestamp         (             ,      warning),                  datetime      ( current_timestamp):
               ,    at timestamp, :at '2017-08-08 08:08:08';
                 ,   interval   (interval         ,at timestamp + INTERVAL 2 HOUR、 + INTERVAL 30 MINUTE)
  2)every             ,         ,   :EVERY 1 MINUTE。
      ,every                 ,  STARTS ENDS      ,         
    :EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK。
④     ,         ,       。  ,create event     on completion preserve            。
    :ON COMPLETION NOT PRESERVE,      
⑤     ,enable on slave,              ;    disable         。
⑦do               ,     SQL  ,     begin...end      ,              。

기본 형식:
CREATE EVENT event_name
ON SCHEDULE  
DO ;

실례 1: 먼저 간단 한 예 를 보 겠 습 니 다.
테스트 테이블 생 성:
CREATE TABLE `test1_event` (
`id` int(8) NOT NULL AUTO_INCREMENT, 
`username` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 
`create_time` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`) #  ID
) ENGINE=innodb AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

타이머 이벤트 만 들 기1: 현재 시간 2 분 후 오픈 10 초 마다 표 test 1 에 기록 하 나 를 삽입event

CREATE EVENT event_1 
ON SCHEDULE EVERY  10 SECOND
STARTS CURRENT_TIMESTAMP + INTERVAL 2 MINUTE
DO insert into test.test1_event(username,password,create_time) values ("  ","tomcat",now());
mysql> select * from test1_event;
+----+----------+----------+---------------------+
| id | username | password | create_time         |
+----+----------+----------+---------------------+
|  1 |        | tomcat   | 2018-09-14 20:49:55 |
|  2 |        | tomcat   | 2018-09-14 20:50:05 |
|  3 |        | tomcat   | 2018-09-14 20:50:15 |
|  4 |        | tomcat   | 2018-09-14 20:50:25 |
|  5 |        | tomcat   | 2018-09-14 20:50:35 |
|  6 |        | tomcat   | 2018-09-14 20:50:45 |
|  7 |        | tomcat   | 2018-09-14 20:50:55 |
+----+----------+----------+---------------------+
7 rows in set (0.00 sec)

타이머 이벤트 만 들 기2: 현재 시간 1 분 후 오픈 5 초 마다 표 test 2 에 기록 하 나 를 삽입event
delimiter $$
create event event_2 
on schedule every 5 second STARTS   CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
COMMENT 'xiaowu create'
do 
    BEGIN
           insert into test.test2_event(username,password,create_time) values("  ","tomcat",now());
    END $$
delimiter ;
mysql> select * from test2_event;
+-----+----------+----------+---------------------+
| id  | username | password | create_time         |
+-----+----------+----------+---------------------+
|   1 |        | tomcat   | 2018-09-14 20:50:06 |
|   2 |        | tomcat   | 2018-09-14 20:50:11 |
|   3 |        | tomcat   | 2018-09-14 20:50:16 |
|   4 |        | tomcat   | 2018-09-14 20:50:21 |
|   5 |        | tomcat   | 2018-09-14 20:50:26 |
|   6 |        | tomcat   | 2018-09-14 20:50:31 |
|   7 |        | tomcat   | 2018-09-14 20:50:36 |
+-----+----------+----------+---------------------+
213 rows in set (0.00 sec)

이벤트 보기: show events;
이벤트 상태 정보 보기:
mysql> select *  from information_schema.events limit 2,3\G
*************************** 1. row ***************************
       EVENT_CATALOG: def
        EVENT_SCHEMA: test
          EVENT_NAME: event_2
             DEFINER: root@localhost
           TIME_ZONE: SYSTEM
          EVENT_BODY: SQL
    EVENT_DEFINITION: BEGIN
           insert into test.test2_event(username,password,create_time) values("  ","tomcat",now());

    END
          EVENT_TYPE: RECURRING
          EXECUTE_AT: NULL
      INTERVAL_VALUE: 5
      INTERVAL_FIELD: SECOND
            SQL_MODE: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
              STARTS: 2018-09-14 20:50:06
                ENDS: NULL
              STATUS: ENABLED
       ON_COMPLETION: NOT PRESERVE
             CREATED: 2018-09-14 20:48:06
        LAST_ALTERED: 2018-09-14 20:48:06
       LAST_EXECUTED: 2018-09-14 21:01:01
       EVENT_COMMENT: xiaowu create
          ORIGINATOR: 1131053306
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
  DATABASE_COLLATION: utf8_general_ci
*************************** 2. row ***************************
       EVENT_CATALOG: def
        EVENT_SCHEMA: test
          EVENT_NAME: event_1
             DEFINER: root@localhost
           TIME_ZONE: SYSTEM
          EVENT_BODY: SQL
    EVENT_DEFINITION: insert into test.test1_event(username,password,create_time) values ("  ","tomcat",now())
          EVENT_TYPE: RECURRING
          EXECUTE_AT: NULL
      INTERVAL_VALUE: 10
      INTERVAL_FIELD: SECOND
            SQL_MODE: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
              STARTS: 2018-09-14 20:49:55
                ENDS: NULL
              STATUS: DISABLED
       ON_COMPLETION: NOT PRESERVE
             CREATED: 2018-09-14 20:47:55
        LAST_ALTERED: 2018-09-14 20:53:15
       LAST_EXECUTED: 2018-09-14 20:53:05
       EVENT_COMMENT: 
          ORIGINATOR: 1131053306
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
  DATABASE_COLLATION: utf8_general_ci
2 rows in set (0.00 sec)

mysql> 

이벤트 닫 기:
mysql> alter  event event_1 disable;
Query OK, 0 rows affected (0.00 sec)

메모: 이 벤트 를 수 동 으로 닫 은 후 MySQL 을 다시 시작 하 더 라 도 이 벤트 는 다시 시작 되 지 않 습 니 다. MySQL alter 이벤트 이벤트 이벤트 에 로그 인하 여 실행 해 야 합 니 다1 enable; 이벤트 이벤트 오픈1.
어떤 이벤트 alter 이벤트 이벤트 수 동 오픈1 enable;
이벤트 삭제: drop 이벤트 이벤트1;
인 스 턴 스 2: 2 분 후 test 2 비우 기이벤트 테이블:
CREATE EVENT event_4
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 MINUTE
DO TRUNCATE TABLE test.test2_event;
       ,                            
mysql> select * from test2_event;
+----+----------+----------+---------------------+
| id | username | password | create_time         |
+----+----------+----------+---------------------+
|  1 |        | tomcat   | 2018-09-14 21:12:26 |
|  2 |        | tomcat   | 2018-09-14 21:12:31 |
|  3 |        | tomcat   | 2018-09-14 21:12:36 |
|  4 |        | tomcat   | 2018-09-14 21:12:41 |
+----+----------+----------+---------------------+
4 rows in set (0.00 sec)

2018 년 9 월 06 일 17 시 15 분 정각에 test 표를 비 웁 니 다.
CREATE EVENT a_test 
ON SCHEDULE AT TIMESTAMP '2018-09-06 17:10:00'
DO TRUNCATE TABLE test.aaa;

좋은 웹페이지 즐겨찾기