Menggunakan Cron-nya Mysql (Event Scheduler)

Inti tutorial ini adalah handle periodical activity seperti yang biasanya dilakukan dengan cron

Kadang dalam sebuah aplikasi yang berhubungan dengan database (khususnya MySQL) 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;

contoh penggunaan pada presensi:

DELIMITER &&
CREATE EVENT e_updateStatus
ON SCHEDULE
EVERY 1 SECOND
ON COMPLETION NOT PRESERVE ENABLE
DO
  BEGIN
    UPDATE matkul SET matkul.status=2  WHERE TIME_TO_SEC(matkul.jamcheckoff)<=TIME_TO_SEC(CURTIME()) AND (matkul.status=1);
    UPDATE matkul SET matkul.status=3  WHERE TIME_TO_SEC(matkul.jamakhir)<=TIME_TO_SEC(CURTIME()) AND matkul.status=2;
  END&&
DELIMITER;

Share this

Related Posts

Previous
Next Post »