Jul 292009
 

Untuk membuat trigger di MySQL and harus mengaktifkan INODB pada MySQL. Setelah aktif barulah kita bisa menggunkan fasilitas trigger pada MySQL. Ok langsung pada tujuan mari kita mulai proyek kita, pertama – tama kita akan membuat 2 buah tabel untuk percobaan kita

Code :

CREATE TABLE <code>tbl_pertama</code> (
  <code>kode</code> char(2) NOT NULL,
  <code>nama</code> varchar(20) default NULL,
  PRIMARY KEY  (<code>kode</code>)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE <code>tbl_kedua</code> (
  <code>kode_kedua</code> char(2) NOT NULL,
  <code>nama_kedua</code> varchar(20) default NULL,
  PRIMARY KEY  (<code>kode_kedua</code>)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Pada dua buah table saya buat sama, agar kita mudah untuk memahami pada proses selanjutnya. Setelah selesai akan tercipta dua buah tabel seperti pada gambar di bawah ini

MySQl

MySQl


Trigger berada pada sebuah table tertentu jadi trigger akan bekerja jika sebuah table mengalami seuatu kejadian, jadi trigger akan bekerja secara otomatis jika sebuah table mengalami proses.

Trigger dapat bekerja BEFORE atau AFTER sebuah tabel mengalami tiga kejadian [Insert, Edit, delete]. Saya harap semua telah mengerti sampai di sini. Trigger dapat berjalan pada saat table mengalami tiga kejadian tersebut [Insert, Edit, delete]. Trigger bukannya bisa melakukan dua proses malah bisa lebih dari satu atau dua proses.

Mari kita buat trigger pada tabel percobaan kita. Pada contoh kasus ini jika kita melakukan pengisian pada tabel pertama makan otomatis tabel kedua akan terisi, begitu juga saat kita melakakukan update dan delete.

Code :
Untuk proses insert :

CREATE TRIGGER <code>tr_insert</code> AFTER INSERT ON <code>tbl_pertama</code>
  FOR EACH ROW
BEGIN
  INSERT INTO tbl_kedua values(new.kode, new.nama);
END;

Untuk proses update :

CREATE TRIGGER <code>tr_update</code> AFTER UPDATE ON <code>tbl_pertama</code>
  FOR EACH ROW
BEGIN
  update tbl_kedua set kode_kedua=new.kode, nama_kedua=new.nama
  where kode_kedua=OLD.kode;
END;

Untuk proses delete :

CREATE TRIGGER <code>tr_delete</code> AFTER DELETE ON <code>tbl_pertama</code>
 FOR EACH ROW
BEGIN
 delete from tbl_kedua where kode_kedua=OLD.kode;
END;

Sampai di sini selesai sudah trigger yang kita buat silakan coba dan explorasi. Berikut beberapa hasil dari trigger kita.

Hasil

Hasil

Facebook Comments

  40 Responses to “Membuat Trigger di MySQL”

  1. mas itu kalau implementasi di bahasa pemograman seperti apa mas..???.kasih contohnya donk..

    thank’s

  2. @ rosid:
    Oh kalo itu sama program ndak ada hubungannya karena semua di jalankan dari server database. jadi trigger diatas akan jalan saat sebuah table mengalami proses, Insert, Edit, Delete.
    Jadi di program cuman proses Insert, Edit, Delete. jadi mempermudah programer gitu ceritanya, semoga membantu.

  3. z mwu bikin trigger tapi pake form penginputan, gimana tuh?

  4. @ Fadli:
    trigger itu jalan di database,
    Misal sampean ingin buat yang berhubungan dengan pengisian data berarti sampean harus buat saat insert di table terserbut,
    Begitu juga jika ingin saat edit data ada proses, sampean buatnya di event editnya. begitu

  5. mbah, coding trigernya itu dimana, trus nyimpennya dimana, execusinya gmana?? klo ditulis diconsole, kalo sampe ; langsung dieksekusi,trus end; ininya ga rampung. klo pake netbeans bisa ga?? aq bingung buat trigernya dimana!!!??? makasih mbah..

  6. @ bahrie?:
    Ok mas begini jawabannya :

    1. Lokasi dan tempat simpan trigger ?
    Jawab : Trigger itu berada dalam database jadisetelah sampean create trigger maka trigger akan tercipata seperti sampean menciptakan view atau table. jadi ibaratnya di nempel deh dalam sebuah table.

    2. Execusinya bagaimana ?
    Jawab : Karena di atas saya jelaskan trigger itu ibaratnya nempel di table jadi dia akan di jalankan saat sebuah table mengalami event, sesuai dengan trigger yang kita ciptakan,
    Misal kita buat trigger on Insert maka saat table itu di insert maka trigger itu akan di eksekusi. dan seterusnya.

    Ok mas semoga penjelasannya dapat membantu 😀

  7. @ mbahsomo:
    maksud aq tu gini mbah.. setahu saya kn klo di mysql lewat konsol xlo ada tanda ; (titik koma) kan langsung dieksekusi. tapi klo kita buat seperti diatas :
    where kode_kedua=OLD.kode;
    END;

    seteleah old.kode; seharuse kan langsung dieksekusi. jadi end; ga ikut keeksekusi. jadi error mbah, gitu.. gmana mbah?

  8. @ bahrie:
    Kalo ngak salah di console ada untuk seting yang seperti itu kok. semisal tidak ada pake phpmyadmin saja

  9. makasih mas,,
    saya punya kasus mini market mas,
    ni table barang
    CREATE TABLE barang (
    kode_barang varchar(10) collate latin1_general_ci NOT NULL,
    kode_barcode varchar(35) collate latin1_general_ci default NULL,
    jenis_barang varchar(35) collate latin1_general_ci NOT NULL,
    nama_barang varchar(50) collate latin1_general_ci NOT NULL,
    harga_beli int(15) default NULL,
    harga_jual int(15) NOT NULL,
    stock int(15) NOT NULL,
    PRIMARY KEY (kode_barang)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

    INSERT INTO barang (kode_barang, kode_barcode, jenis_barang, nama_barang, harga_beli, harga_jual, stock) VALUES
    (‘1’, ‘123456789’, ‘permen’, ‘Nano’, 10000, 15000, 100);

    ni table rincibelanja
    CREATE TABLE penjualanrinciminimarket (
    no_nota varchar(10) collate latin1_general_ci NOT NULL,
    kode_barang varchar(10) collate latin1_general_ci NOT NULL,
    kode_barcode varchar(35) collate latin1_general_ci NOT NULL,
    jenis_barang varchar(35) collate latin1_general_ci NOT NULL,
    harga_jual double NOT NULL,
    jumlah int(10) NOT NULL,
    sub_total double NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

    nah yang ingin saya tanyakan gimana sintax triggernya,
    jika ada kode barang dan jumlah yang masuk pada tabel rinci kemudian mempengaruhi stock barang yang ada pada tabel barang dengan kondisi kode barang pada tabel barang sama dengan kode barang pada tabel rincibelanja, makasih mas mohon bantuannya ya mas

  10. @ aal:
    cuma mau bantu mbah somo ya,, mudah2n bener.. 😀

    dua tabel itu harus ada relasinya. pertama ganti tipe tabelnya menjadi innodb,(yang kamu pake itu myISAM). trus kode_barang ditabel penjualanrinciminmarket sebagai foreignkey, sehingga 2 tabel tersebut ada hubungan.
    triggernya seperti ini

    create trigger kurangi_barang after insert on penjualanrinciminimarket
    for each row
    update barang set stok=stok-new.jumlah;

    diusahakan pake mysql versi terbaru..
    smoga berhasil..

  11. @ bahrie:
    Terimakaish mas
    @ aal:
    atau :

    create trigger kurangi_barang after insert on penjualanrinciminimarket
    for each row
    declare 
    int jml;
    begin
    select stok into jml from barang where kode_barang = new.kode_barang ;
    jml = jml + new.jumlah ;
    update barang set stok=jml where kode_barang = new.kode_barang;
    end;
    

    semoga membantu

  12. That’s Too nice, when it comes in india hope it can make a Rocking place for youngster.. hope that come true.

  13. my God, i thought you were going to chip in with some decisive insght at the end there, not leave it with ‘we leave it to you to decide’.

  14. @ Dedy Black:
    Terimakasih atas kunjungannya mas

  15. nice share gan!!!

  16. @ herman_whyd:
    terimakasih kembali mas

  17. @ mbahsomo:
    create trigger kurangi_barang after insert on penjualanrinciminimarket
    for each row
    update barang set stok=stok-new.jumlah;
    __________________________________
    klo di lhat dari trigger di atas,.
    saat melakukan update,.bukan satu stok barang aj yang akan berubah,.melaikan seleruh stok di table barang,..
    ini terjadi karena kurangnya source “where Kd=kd.new”
    Bukan nya begitu mas?

  18. @ Indep:
    Betulll yup

  19. Matur suwon yo… tutorialnya…

  20. @ Madi:
    Sama sama mas

  21. Mohon pencerahan kok waktu saya coba triggernya keluar begini

    Pencarian SQL:

    CREATE TRIGGER tr_insert AFTER INSERT ON tbl_pertama
    FOR EACH
    ROW
    BEGIN
    INSERT INTO tbl_kedua
    VALUES (
    new.kode, new.nama
    );

    MySQL menyatakan: Dokumentasi
    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 4

    Pencarian SQL:

    CREATE TRIGGER tr_update AFTER UPDATE ON tbl_pertama FOR EACH ROW BEGIN UPDATE tbl_kedua SET kode_kedua = new.kode,
    nama_kedua = new.nama WHERE kode_kedua = OLD.kode;

    MySQL menyatakan: Dokumentasi
    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 5

    Pencarian SQL:

    CREATE TRIGGER tr_delete AFTER DELETE ON tbl_pertama FOR EACH ROW BEGIN DELETE FROM tbl_kedua WHERE kode_kedua = OLD.kode;

    MySQL menyatakan: Dokumentasi
    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 4

    mohon bantuannya…kalau bisa dikirim ke email saya grou.up1st@gmail.com

  22. @ ahmad:
    yang pertama cek table sudah INODB belum dan yang kedua itu syntac triggernya kurang END;
    Semoga membantu

  23. @mbahsomo: sintax where kode_kedua=OLD.kode; fungsinya utk apa ya?`

  24. Saya copy yah , mau tak post tenang akan ngelink ke sini kok 🙂

  25. adis wrote:

    @mbahsomo: sintax where kode_kedua=OLD.kode; fungsinya utk apa ya?`

    OLD.kode pada event delete adalah mengambil kode yang telah di hapus

    @ NurEllySaputra:
    MOnggo mas

  26. thanks bro berhasil…, very simple, contoh di web sebelah pake delimiter malah ga jalan.
    oiya bro klo mo drop trigger kok ane msh eror ya.., ada masukan.

    skalian tutorial store procedure yg simple dong bro.. hehehe

  27. @ bagus sanyoto:
    Terimakasih kembali pren
    untuk drop trigger :

    drop trigger triger_name;
    

    Untuk procedure kalo ngak slah saya pernah buat kok http://sugik.do-event.com/?p=185
    tutorial selanjutnya pasti menyusul deh 😀

  28. @ mbahsomo:
    tapi sedikit sedih nih, cos prshaan web hosting ngelarang kita bwt ngejalanin trigger.

  29. Makasih mbah tutorialnya, dicoba dulu mumpung ada tugas dari pak dosen 🙂

  30. Mas mhn maap sya baru bgt kenal dg yg namanya trigger..
    sya sdng bingung di TA, sy buat buat aplkasi pnjualan pulsa,ada kndala pada perubahan harga pulsa yg di ubah2 gitu mas, misalkn pada saat ini harga kode IM5=6000, lalu di lakukanlah penjualan dg faktur FK001.
    Lalu selang kemudian, harga IM5 trsbt di ubah harga nya jadi 6500, terus dilakukan lah penjualan dg fktur FK002,
    Nah aku bingung saat mnampilkn report nya mas, hrus detail kata dosen seminar sy itu, harus jadi :
    faktur|kodepulsa|harga
    fk001|IM5|6000
    fk002|IM5|6500
    sedangkan field hrga kn ambil dri table pulsa.Katanya hrus pke trigger.. Mohon bantuannya mas, Saya ucapkn terima kasih sblumnya, Sy ingin cepet sidang mas 🙁

  31. Mungkin triggernya untuk edit stok kalo untuk liat harganya bisa pakek relasi saja.

  32. Ok sama – sama

  33. thx mas, tutorialnya sdh membantu

  34. saya coba proses insert-update-delete tapi error yah?

    “#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 4 “

  35. Kemungkinan script triggernya ada yang salah mas

  36. @ mbahsomo:
    saya copy paste dari script diatas mas,
    kok error yah..

    lagi mau nyoba trigger di databse..tapi mau nyoba sample nya dulu nih..

    mohon dibantu..:D

  37. anggi
    Coba lihat type tablenya inodb atau ngak, atau masih pake myisam
    untuk semua tablenya

  38. Bukan mas bukan edit stok.. tapi perubahan harga jika sewaktu2 berubah gitu… ntr di laporan penjualan kan ambil field harga dari tabel barang/pulsa…
    sedangkan jika harga yg dulu itu misal 6000 nah lalu di ubah di tabel barang jadi 7000..
    nah ntar kan di laporan penjualan di akumulasikan mas, brp jumlah penjualan buat pulsa A, B, dan seterusnya..
    Nah saya di suruh dosen tuh buat laporan penjualan misal akumulasi penjualan pulsa A bulan ini ada 6 dengan harga 6000, lalu dengan harga 7000 ada 3..
    Pada saat sy bertanya bgmn caranya itu pada dosen saya,, di suruh pake trigger katanya mas.. mohon pencerahannya…

  39. Kalo harga kalo bisa jangan ngambil dari table master nanti kalo terjadi perubahan – perubahan harga laporan yang sudah – sudah akan menjadi error. Jadi harga di simpansaja pada tamble transaksinya, jangan ambil dari table master

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

(required)

(required)