MySQL EVENT Scheduler


Kadang dalam sebuah aplikasi web membutuhkan sebuah query yang harus dijalankan secara periodic, misalkan setiap satu bulan sekali, Mungkin kalau pengguna LINUX bisa pake JOB CRON kalau di WINDOWS pake Schedule Task. Di MySQL versi 5.1 fitur tersebut telah ada, istilahnya adalah Event Scheduler.
Sebelum memulai membuat sebaik nya dilihat dulu apakah feature schedule nya hidup atau tidak, cara memeriksa nya

SHOW VARIABLES LIKE ‘event_scheduler’

+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| event_scheduler | ON |
+—————–+——-+
1 row in set (0.02 sec)

Untuk menghidupkan MySQL Event Schedule ketikan perintah dibawah ini

SET GLOBAL event_scheduler = 1;

dan untuk mematikan nya

SET GLOBAL event_scheduler = 0;

MySQL Event Schedule terdiri dari beberapa macam, antara lain di bawah ini, sebelum mulai saya akan membuat sebuat tabel terlebih dahulu untuk keperluan demo Event Schedule ini

CREATE TABLE schedule_table (
no int(11) NOT NULL AUTO_INCREMENT,
des varchar(255) DEFAULT NULL,
time datetime NOT NULL,
PRIMARY KEY (no)
) 

1. EVENT SCHEDULER Berdasarkan tanggal dan waktu yg sudah di tentukan

CREATE EVENT event_name
ON SCHEDULE
AT {DATE AND TIME)
DO
{SQL COMMAND};

contoh di bawah ini membuat insert data ke schedule_table pada tgl 1 juni 2009 jam 18:06:49

CREATE EVENT event_name_1
ON SCHEDULE AT ‘2009-06-01 18:06:49’
DO insert into schedule_table values (null, ‘sch 1’, now());

hasilnya:

select * from schedule_table;
+—-+——-+———————+
| no | des | time |
+—-+——-+———————+
| 1 | sch 1 | 2009-06-01 18:06:49 |
+—-+——-+———————+

2. EVENT SCHEDULER berdasarkan pengulangan waktu

CREATE EVENT event_name
ON SCHEDULE
EVERY {x}
{SECOND | MINUTE | HOUR | DAY | MONTH | YEAR | WEEK}
DO
{SQL COMMAND};

contoh dibawah ini akan melakukan insert data ke tabel schedule_table setiap satu menit

CREATE EVENT event_name_2
ON SCHEDULE EVERY 1 MINUTE
DO insert into schedule_table values (null, ‘sch 2’, now());

Hasilnya
+—-+——-+———————+
| no | des | time |
+—-+——-+———————+
| 2 | sch 2 | 2009-06-01 18:16:27 |
| 3 | sch 2 | 2009-06-01 18:17:27 |
| 4 | sch 2 | 2009-06-01 18:18:27 |
| 5 | sch 2 | 2009-06-01 18:19:27 |
| 6 | sch 2 | 2009-06-01 18:20:27 |
| 7 | sch 2 | 2009-06-01 18:21:27 |
| 8 | sch 2 | 2009-06-01 18:22:27 |
| 9 | sch 2 | 2009-06-01 18:23:27 |
| 10 | sch 2 | 2009-06-01 18:24:27 |
| 11 | sch 2 | 2009-06-01 18:25:27 |
+—-+——-+———————+
10 rows in set (0.01 sec)

untuk EDIT event schedule, formatnya di bawah ini

ALTER EVENT event_name
[ ON SCHEDULE schedule ]
[ RENAME TO event_name2 ]
[ DO sql_statement ]

contoh dibawah ini akan mengubah nama schedule dari event_name_2 ke event_name_3

ALTER EVENT event_name_2
ON SCHEDULE EVERY 2 MINUTE
RENAME TO event_name_3
DO insert into schedule_table values (null, ‘sch 3’, now());

untuk HAPUS event schedule formatnya seperti dibawah ini

DROP EVENT event_name ;

contoh dibawah ini adalah menghapus schedule event_name_3

DROP EVENT event_name_3;

untuk melihat list event schedule yg ada pada database kita, cara dibawah ini

SELECT * FROM mysql.event\G
*************************** 1. row ***************************

db: test
name: event_name_1
body: insert into schedule_table values (null, ‘sch 1’, now())
definer: root@localhost
execute_at: 2009-07-01 11:06:49
interval_value: NULL
interval_field: NULL
created: 2009-06-04 18:03:54
modified: 2009-06-04 18:03:54
last_executed: NULL
starts: NULL
ends: NULL
status: ENABLED
on_completion: DROP
sql_mode:
comment:
originator: 1
time_zone: SYSTEM
character_set_client: latin1
collation_connection: latin1_swedish_ci
db_collation: latin1_swedish_ci
body_utf8: insert into schedule_table values (null, ‘sch 1’, now())
1 row in set (0.00 sec)


One thought on “MySQL EVENT Scheduler

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s