Log Of Oyazhuryachna

Membuat Trigger di MySQL (Bagian #1)

Trigger digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis sebelum atau sesudah terjadi proses INSERT, UPDATE atau DELETE dari suatu tabel. Sebagai contoh misalnya kita ingin menyimpan id pelanggan secara otomatis ke tabel ‘log’ sebelum menghapus data di tabel pelanggan. Triggers mulai dikenal di versi MySQL 5.0, dan di versi saat ini (5.0.4) fungsionalitasnya sudah bertambah.

Secara sederhana fungsi daripada trigger adalah sebagai berikut :

  • Melakukan update data otomatis jika terjadi perubahan. Contohnya adalah dalam sistem penjualan, jika dientri barang baru maka stock akan bertambah secara otomatis.
  • Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi perubahan, secara otomatis akan menyimpan ke tabel log.
  • Trigger dapat digunakan untuk melakukan validasi dan verifikasi data sebelum data tersebut disimpan.

Membuat Trigger Baru
Berikut ini bentuk umum perintah untuk membuat triggers:

CREATE TRIGGER name
[BEFORE|AFTER] [INSERT|UPDATE|DELETE]
ON tablename
FOR EACH ROW statement

Dimana:

BEFORE | AFTER digunakan untuk menentukan kapan proses secara otomatis akan dieksekusi, sebelum atau sesudah proses.
INSERT | UPDATE | DELETE digunakan untuk menentukan event yang dijadikan trigger untuk menjalankan perintah-perintah di dalam triggers. Statement atau perintah dalam trigger dapat berupa satu perintah saja, dan dapat juga beberapa perintah sekaligus. Jika terdapat beberapa perintah dalam trigger, maka gunakan perintah BEGIN dan END untuk mengawali dan mengakhiri perintah. Di dalam statement trigger, kita dapat mengakses record tabel sebelum atau sesudah proses dengan menggunakan NEW dan OLD. NEW digunakan untuk mengambil record yang akan diproses (insert atau update), sedangkan OLD digunakan untuk mengakses record yang sudah diproses (update atau delete).

Berikut ini contoh trigger yang akan mngisi field jml_anak pada tabel tblpegawai ketika dilakukan pengisian data anak pada tabel tblanak, adapun langkah-langkahnya adalah :

1. Jalankan Mysql Client disarankan gunakan command line interface atau berbasis GUI jangan menggunakan phpmyadmin karena akan berbeda langkahnya ketika membuat trigger

2. Buat database pegawai

mysql> create database pegawai;
Query OK, 1 row affected (0.00 sec)

3. Buat Tabel tblpegawai

mysql> create table tblpegawai (
no_induk char(4) not primary key,
nama varchar(30),
jenis_kelamin char(1),
jml_anak smallint);
Query OK, 0 rows affected (0.13 sec)

4. Masukan Data ke table tblpegawai
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('001','Oya Suryana','L');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('002','Dadang Suhendar','L');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('003','Emah','P');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('004','Ecih Sukaesih','P');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('005','Yudi Suherman','L');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('006','Uman Suherman','L');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('007','Alis Suhelawati','P');

5. Tampilkan Tabel Pegawai


6. Buat Tabel Anak
mysql> create table tblanak (
id_anak int auto_increment primary key,
no_induk char(3),
nama_anak varchar(30)
);
Query OK, 0 rows affected (0.12 sec)

7. Membuat Trigger dengan nama jml_anak dimana akan dijalankan setelah (after) penginputan data (insert) pada tabel tblanak

mysql> Delimiter //
mysql> Create Trigger jml_anak after insert on tblanak
-> for each row begin update tblpegawai
-> set jml_anak=(select count(*)from tblanak where no_induk=new.no_induk)
-> where no_induk=new.no_induk;
-> end;
-> //
mysql> Delimiter ;
Query OK, 0 rows affected (0.25 sec)

8. Mengisi data anak ke tblanak

mysql> insert into tblanak (no_induk,nama_anak) values ('001','Farhan');
mysql> insert into tblanak (no_induk,nama_anak) values ('001','Abiq');
mysql> insert into tblanak (no_induk,nama_anak) values ('002','Davinsa');

9. Tampilkan data Anak

10. Saatnya mengecek apak triger berfungsi atau tidak, tampilkan data pegawai di tblpegawai

Perhatikan data karyawan dengan no_induk 001 dan 002 pada field jml_anak secara otomatis akan terisi dengan jml anak yang diinput pada tblanak.

,

9 thoughts on “Membuat Trigger di MySQL (Bagian #1)

  • Zickkeen says:


    mysql> Delimiter //
    mysql> Create Trigger jml_anak after insert on tblanak
    -> for each row begin update tblpegawai
    -> set jml_anak=(select count(*)from tblanak where no_induk=new.no_induk)
    -> where no_induk=new.no_induk;
    -> end;
    -> //
    mysql> Delimiter ;

    Kalo di baca spt ini ya kang?
    Jika table tblanak terjadi insert data jalankan {
    update jml_anak dari table tblpegawai yang di dapat dari penghitungan data no_induk yang ada di tblanak
    }

    trus script no_induk=new.no_induk itu maksudnya apa kang? kenapa di ulang 2x?

    • admin says:

      ketika timing nya adalah after insert maka untuk mengambil nilai yang baru saja diiinput maka gunakan ‘new’, new apa ?? tergantung mau apa yang diambil dalam hal ini no_induk jadi utnuk mengambil nilai no_induk yang baru saja di input adalah new.no_daftar

  • zickkeen says:

    B’arti fungsinya seperti get/post di php?

  • […] « Membuat Trigger di MySQL (Bagian #1) […]

  • dyan says:

    thx gan, tutorialnya apik + ajib
    mantab !!!! 5 STAR

  • Fadly says:

    Kang, ada gak trigger kyk gini..
    jadi saya punya table induk yng telah ter-primary key..kemudian saya foreign key ke table anak….nah gimana caranya pada saat saya isi table induk tersebut table anak secara otomatis terisi juga..
    makasih 😀

    • adexs21 says:

      DELIMITER |
      CREATE TRIGGER transaksi1 AFTER INSERT
      ON namatblinduk FOR EACH ROW
      BEGIN
      INSERT INTO namatblanak
      (
      id_tblinduk,
      tgl_transaksi1
      )
      VALUES
      (
      NEW.id_tblinduk,
      SYSDATE()
      );
      END;
      |
      DELIMITER ;

  • yunita says:

    kalau untuk trigger untuk validasi itu gimana

Leave a Reply

Your email address will not be published. Required fields are marked *