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)
| 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)
)
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};
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());
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 |
+—-+——-+———————+
+—-+——-+———————+
| 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};
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());
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)
+—-+——-+———————+
| 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 ]
[ 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());
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;
EmoticonEmoticon