Monday, November 23, 2020

Event Scheduler di Mysql

Event Scheduler di Mysql

Event mysql adalah sekumpulan query atau perintah yang dijalankan dan diberhentikan pada periode waktu tertentu atau sesuai jadwal yang telah dibuat. Event sangat membantu kita untuk melakukan tugas-tugas yang bersifat rutin seperti check data atau melakukan CRUD (Create, Read, Update dan Delete) pada kondisi tertentu, konsep ini mirip dengan cron job service yang ada di Linux dan schedule task yang ada di Windows.

Bagi yang menggunakan XAMPP dan phpMyadmin dapat dilihat saat kita membuka salah satu database, sudah tersedia panel Events pada pojok kanan atas, untuk lebih jelasnya dapat dilihat pada gambar di bawah ini :


Berikut penjelasan dari setiap nomor yang ada di gambar atas :

1. Events, tombol ini berfungsi untuk menampilkan data event scheduler yang sudah kita buat. Pada panel ini kita dapat membuat, mengedit dan menghapus event, termasuk melakukan export sourcode dari sebuah event.

2. Events scheduler status, tombol ini berfungsi untuk mengaktifkan dan menonaktifkan semua events yang ada, pastikan statusnya ON agar semua event yang kita buat berjalan sesuai fungsinya. Usahakan juga service database kita tetap berjalan, karena status events scheduler akan OFF jika service database kita tidak berjalan.

3. Add event, tombol ini berfungsi untuk membuat event baru.

Kali ini kita akan mempraktekan pembuatan event yang sederhana yang bernama Rekap_Bulanan, yaitu event untuk menyimpan semua tanggal pada bulan berjalan, jika hari ini adalah tanggal 11 november 2020 maka kita akan menyimpang tanggal dari 2020-11-01 sampai 2020-11-30 (bulan berjalan) yang akan di jelaskan pada gambar di bawah ini.


Kita cukup menuliskan query pada panel SQL, berikut query yang bisa kita coba berdasarkan gambar di atas :
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
DROP EVENT IF EXISTS Rekap_Bulanan;
CREATE EVENT Rekap_Bulanan ON SCHEDULE EVERY 1 DAY STARTS '2019-01-01 10:10:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
    DECLARE  BOOL DEFAULT 0;
    DECLARE period VARCHAR(40);
    SET period	= DATE_FORMAT(CURDATE(),'%Y-%m');
    -- Hari Kerja
    INSERT INTO rekap_absensi(id_ra,id_pegawai,periode,created_at)
    SELECT '' AS kode, idpegawai, period, NOW() FROM pegawai WHERE tgl_resign IS NULL AND alasan IS NULL AND idpegawai NOT IN('1', '2', '3') AND idpegawai NOT IN(SELECT rekap_absensi.id_pegawai FROM rekap_absensi WHERE rekap_absensi.periode=period);
IF  THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
END

Fungsi Drop Event di atas berfungsi untuk menghapus event jika ada event dengan nama yang sama, hal ini untuk menghindari error. Event Rekap_Bulanan dijalankan setiap hari pada pukul 10:10:00 untuk menginput semua tanggal pada tabel rekap_absensi dengan struktur tabel seperti keterangan di bawah ini :
    
Tabel rekap_absensi
1. id_ra INT(11) Auto Increment (PK)
2. idpegawai VARCHAR(10)
3. periode DATE()
4. created_at DATETIME()

Jika sudah mengeksekusi query event di atas, jangan lupa untuk memastikan status events scheduler adalah ON atau kita bisa menggunakan query seperti di bawah ini :
1
SET GLOBAL event_scheduler = 1;

Untuk status ON :
Untuk status OFF :
1
SET GLOBAL event_scheduler = 0;
Sumber referensi :
Website : https://dev.mysql.com/
Buku : "Belajar Otodidak MySQL (Teknik Pembuatan dan Pengelolaan Database)"
Penulis : Budi Raharjo
Penerbit : Informatika - Bandung
Praktek : Mohammad Fazlurrahman

0 comments:

Post a Comment