Halo temen-temen pejuang ilmu, apa kabar? Kali ini kita akan belajar bersama materi lawas yang punya banyak magic sekaligus masih sangat bermanfaat, salah satunya ialah Trigger pada SQL, dan kita akan belajar dengan database sejuta umat yaitu MySQL / MariaDB.

Pendahuluan

Trigger adalah suatu objek database yang merupakan aksi atau prosedur yang terjadi jika terjadi perubahan pada suatu row. Trigger tidak dapat menjadi bagian dari suatu temporary table atau suatu view. Intinya script SQL yang memicu terjadinya suatu kejadian seperti INSERT, UPDATE, DELETE secara otomatis setelah kejadian tertentu.

Mungkin melalui pengertiannya akan sedikit membingungkan, maka dari itu mari kita langsung praktekkan.

Pembuatan Trigger

Berikut adalah syntax lengkap cara membuat trigger di MySQL :

CREATE
    [DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ONtbl_name FOR EACH ROW trigger_body

// Keterangan :

  • trigger_name : nama trigger.
  • trigger_time : kapan kita mengeksekusi trigger, apakah sebelum atau sesudah perubahan pada row data table. Jadi pilihannya adalah AFTER atau BEFORE.
  • trigger_event : merupakan event atau peristiwa yang menyebabkan trigger dilakukan. Pilihan event tersebut adalah INSERTUPDATEDELETE.
  • tbl_name : nama table.
  • trigger_body statement-statement perintah SQL yang akan dilakukan. Jika perintahnya lebih dari satu maka gunakan dalam blok statement BEGIN … END.
  • Jika DEFINER dispesifikasikan maka kita memutuskan trigger tersebut dijalankan hanya oleh user tertentu (dalam format penulisan user@host). Jika tidak dispesifikasikan, maka user yang melakukan perubahan (CURRENT_USER) adalah pilihan default.

// Referensi “OLD” dan “NEW”

Karena trigger digunakan pada saat terjadi perubahan row data, maka kita perlu referensi ke row sebelum dan sesudah perubahan. Untuk ini ada dua alias yang berfungsi untuk hal tersebut yaitu OLD dan NEW.

Sesuai namanya, OLD digunakan untuk referensi sebelum perubahan dan NEW untuk referensi sesudah perubahan.

Contoh Penggunaan Trigger

Disini saya punya tabel p_item dan tabel t_sale_detail seperti ini :

table t_sale_detail before
table p_item before

Kita bisa menggunakan trigger untuk kasus jika data di tabel t_sale_detail bertambah, maka field stock di tabel p_item yang memiliki item_id yang sama, akan berkurang otomatis sesuai qty yang ada di tabel t_sale_detail. Begitupun sebaliknya, yang akan kita langsung praktekkan dibawah.

Kita buat contoh trigger untuk event setelah penghapusan (AFTER DELETE) pada tabel t_sale_detail, jadi ketika delete data di tabel t_sale_detail maka field stock yang ada di tabel p_item dengan item_id yang sama akan bertambah sesuai qty di tabel t_sale_detail. Kurang lebih seperti ini script SQL-nya :

 DELIMITER
|
CREATE TRIGGER stock_del AFTER DELETE
ON t_sale_detail FOR EACH ROW
BEGIN
UPDATE p_item SET stock = stock + OLD.qty
WHERE item_id = OLD.item_id;
END
|
DELIMITER ;

Okay, sudah ter-create sempurna triggernya.

trigger stock_del in table t_sale_detail

Sekarang tinggal kita lihat hasilnya. Kita ingat-ingat dulu data-data pada 2 tabel diatas terutama bagian stock, kalo lupa temen2 bisa scroll-up dikit.

Kita coba hapus data di tabel t_sale_detail dengan sale_id = 16 (detail_id = 27 & 28), dan lihat stock pada tabel p_item akan bertambah sesuai qty pada tabel t_sale_detail yang dihapus.

table t_sale_detail after
table p_item after

Wow, it works! Magic kan? Selain fitur-fitur bermanfaat yang sudah umum seperti DDL, DML, Join, ternyata SQL juga menyimpan banyak fungsi menarik lainnya seperti Procedure, Function, View, dan lain sebagainya yang menarik untuk kita coba.

Selamat belajar dan praktek para pejuang! Semoga bermanfaat 🙂

Referensi :
https://dev.mysql.com/doc/refman/8.0/en/triggers.html

  • 407
  •  
  •  
  •  
  •  
  •  
  •  

TINGGALKAN KOMENTAR

Please enter your comment!
Please enter your name here