Trigger adalah sebuah Script MySQL Command yang memicu suatu kejadian dalam database MySQL berupa aksi insert, update dan delete setelah syarat tertentu. Lokasi penulisan Trigger adalah di dalam database yang bersangkutan, dan Trigger tidak ditempatkan di php script. Hasil penulisan dari sebuah Trigger akan menimbulkan efek manipulasi database secara otomatis sesuai dengan yang kita inginkan. Misalnya, setelah insert pada tabel_a dan kolom a1 maka akan otomatis insert pada tabel_b pada kolom b1. Begitu pula untuk aksi update dan delete. Untuk pembuatan Trigger ini saya menggunakan Appserv 2.5.10, MySQL Version 5.0.24a, browser mozilla Firefox dengan sistem operasi Windows7 Ultimate.
Trigger merupakan script MySQL Command yang terdiri dari 3 pokok dasar yaitu, insert, update dan delete. Adapun langkah-langkah membuat Trigger adalah :
1. Buat database dulu dengan script : create databaset ‘tes’;
2. Buat tabel beli :
CREATE TABLE beli (id_beli int(11) NOT NULL AUTO_INCREMENT , kd_barang varchar(10) default NULL , satuan double default NULL , jumlah int(11) default NULL , total double default NULL , status varchar(30) default NULL , PRIMARY KEY (id_beli) ) ENGINE = MYISAM DEFAULT CHARSET = utf8;
3. Buat tabel Jual :
CREATE TABLE jual (id_jual int(11) NOT NULL AUTO_INCREMENT , kd_client varchar(10) NOT NULL , kd_barang varchar(10) default NULL , satuan int(5) default NULL , jumlah double default NULL , total double default NULL , status varbinary(25) default NULL , PRIMARY KEY (id_jual) ) ENGINE = MYISAM DEFAULT CHARSET = utf8;
4. Buat tabel stok :
CREATE TABLE stok (kd_barang varchar(5) NOT NULL , jumlah int(11) NOT NULL , PRIMARY KEY (kd_barang) ) ENGINE = MYISAM DEFAULT CHARSET = utf8;
Nah, anda sudah memiliki tabel beli, jual dan stok. Skenarionya adalah jika ada pembelian, akan otomatis menambah stok barang, dan jika ada penjualan akan mengurangi stok barang secara otomatis.
Perhatikan tanda $$ tersebut harus dikonfigurasikan seperti gambar berikut :
Artinya, anda harus menambahkan tanda $$ karena itu merupakan delimiter yang membatasi akhir dari sebuah Trigger
1. Membuat Trigger beli_barang
CREATE TRIGGER beli_barang after INSERT ON beli FOR EACH ROW BEGIN INSERT INTO stok SET kd_barang = NEW.kd_barang , jumlah=New.jumlah ON DUPLICATE KEY UPDATE jumlah=jumlah+New.jumlah; END$$
Keterangan : Trigger dibuat dengan nama ‘beli_barang’ dan bekerja setelah insert data pada tabel beli, maka akan insert juga pada tabel stok dengan mengisi field pada tabel stok berupa kd_barang dan jumlah sama persis yang di insert di tabel beli. Dan Metode updatenya adalah jumlah yang ada ditambah dengan jumlah baru yang di insert kan di tabel beli. Jika awal insert otomatis tidak ada penjumlahan, karena logika nya jumlah barang yang ada di tabel stok adalah nol.
On Duplicate Key Update artinya : jika ada insert data di tabel beli dengan kode barang (kd_barang) yang sama, maka akan otomatis menambah jumlah nya di tabel stok dengan kd_barang yang dimaksud. Akan saya jelaskan lebih rinci dengan gambar :
2. Membuat Trigger jual_barang
CREATE TRIGGER jual_barang after INSERT ON jual FOR EACH ROW BEGIN UPDATE stok SET jumlah = jumlah - NEW.jumlah WHERE kd_barang = NEW.kd_barang; END$$
Keterangan : Trigger dibuat dengan nama ‘jual_barang’ setelah insert pada tabel jual maka pada setiap barisnya akan di update dimana kode barang (kd_barang) nya sama dengan yang ada di tabel stok (stok). Hasilnya adalah jika ada penjualan barang pada tabel jual (jual), maka akan otomatis mengurai jumlah barang pada stok (stok), dimana kode barang yang dimaksud (kd_barang) sama dengan yang diisi di tabel jual (jual).
Kesimpulannya, salah satu manfaat Trigger adalah membantu administrasi database dengan teknik memanipulasi data sesuai dengan yang dibutuhkan.








thank gan infonya. pas banget sama yang lagi aku butuhin. klo di phpmyamin ada beda nya g tu kira2?
tidak ada pak.. yang penting langkahnya benar,, triger kaitannya dengan mysql,, version yang support adalah 5.xxx ke atas.. bisa juga menggunakan mysql yog
ehm leh tanya g mas…
aq punya masalah ne,,,
bisa g create table / field dalam table secara otomatis apabila terjadi penambahan dari admin,…
thanx ya..
reply ya kk….
matur suwon,,,,
pengalamanku menggunakan trigger, waktu bikin sms gateway..
agak2 lupa, kalo gak salah tuuu:
jangan lupa set delimiter dulu pada prompt mysqlnya,
mysql> delimiter //
setelah itu berikan perintah:
mysql> CREATE TRIGGER table1 BEFORE INSERT ON table2
-> FOR EACH ROW
-> BEGIN
-> IF NEW.nilai SET NEW.terbilang=baik;
-> ELSEIF NEW.Salary>70 THEN
-> SET NEW.terbilang=sangat baik;
-> END IF;
-> END
-> delimitter ;
intinya kita bisa melakukan update, delete, insert data pada table mysql menggunakan trigger.
awalnya saya bingung, mengikuti forum dan browsing ke luar negeri pun akhirnya menemukan jalan..
aku banyak belajar di http://www.roseindia.net/mysql/mysql5/triggers.shtml
selamat mencoba,
terima kasih buat penulisnya..
salam,
mapays
because mysql version is deferent, is is n’t?
trigger adalah konsepnya memicu sebuah kejadian atas kejadian lain baik sebelum dan sesudahnya. maksudnya gmana nih mas dede.. biar lebih rinci deh,, mungkin akan ada solusinya,,
AFAIK, Trigger pada MySQL hanya akan memicu fungsi/query DML(Data Manipulation Language) yaitu INSERT, UPDATE, DELETE, SELECT.
boleh juga tuh.
pak tanya lagi ki, setiap tabel kan hanya mampu menampung 1 triger, lha padahal kita butuh 3 event triger. insert, update, delete. nah kira2 gimana tu skripnya. menindak lanjuti contoh yg diatas saja pak? terimakasih
solusinya hasil query triger insert, update dan delete ditampung pada tabel berbeda. Untuk lebih spesifiknya silahkan email contoh softwarenya ke putrablora@yahoo.co.id nanti saya pelajari pak.
gni lho pak, kemaren kan saya knsultasi sama dosen, kalo triger itu tidak bisa ada lebih dari satu i setiap tabel nya. nah tapi satu triger itu bisa memuat 3 event sekaligus, yaitu insert, update sama delete. klo seperti itu skripnya seperti apa, gt? masih seputar stok barang, sepeerti contoh diatas. misal di tabel pembelian, contohnya kan di buat trigger pembelian dengan event insert, nah sekarang dmn kalo evennya ada insert, update sama delete! terimakasih
bisa pak.. dalam satu tabel bisa lebih dari 1 trigger,, caranya dengan before insert dan after insert.. namun hati2 jangan sampai membuat trigger dengan statemen rancu.. intinya logikanya harus jalan dl.. sya pake 2 trigger dalam 1 tabel.
untuk lebih detailnya silahkan kasusnya dikirim ke email saya, nanti saya bantu analisis, trigger merupakan salah satu pemicu saja.. mungkin bisa pake store procedure, atau langsung menggunakan script php sendiri yang membuat query pada saat bersamaan. Begitu pak bhaktiardi..
1.ada gambaran gak untuk penerapan trigger di database untuk aplikasi Sistem Informasi Akademik?
2.apakah bisa dilakukan trigger untuk databas yang berbeda dan pada server yang berbeda?
terima kasih
untuk mas dedi,, sistem informasi akademik seperti apa yang dimaksud?konsep trigernya udah faham belum??
konsep dasar trigger udh tau mas tapi saya ingin membuat trigger sebagai proses backup data secara rutin. Gambaran umumnya seperti ini:
sistem informasi akademik mempunyai 1 database induk yang menampung semua data2 mahasiswa.aplikasi ini digunakan oleh mahasiswa untuk menginput mata kuliah dan administrasi lainnya.
Yang ingin saya rancang adalah:
1. membuat 1 database cadangan / duplikat dari database induk.
2. trigger ingin saya gunakan sebagai proses backup data dari database induk.
3. setiap ada proses insert,update dan delete di database induk maka tabel di database backup juga ikut terupdate.
4. bisa dibilang replikasi data tetapi secara rutin untuk setiap proses.
Yang ingin saya tanyakan:
1. kira2 konsep sistem atau triggernya gmna mas?
2. apakah trigger bisa diterapkan untuk server yang berbeda,contoh: database induk di 127.0.0.1 dan database backup 127.0.0.2 (MySQL)
Terima kasih
untuk proses backupdata secara rutin biasanya saya bikin mysql dump untuk scheduler backup.. atau menggunakan software khusus seperti mysql gui atau kettle.
kalo misalnya ada ada 3 tabel dimana saya mau menjumlahkan total biaya pada ketiga tabel tersebut
di tabel pertama ada kolom tempat dengan isi data “A”, di tabel kedua pun pada kolom tempat data yang ada pada tabel pertama tetap “A”, namun pada tabel ke tiga terjadi perubahan tempat, dimana barang pada tempat “A” di pindah pada Tempat “C” nah pada saat seperti ini gimana caranya buat trigger kalo terjadi perubahan tempat??apa komputer tetap membaca tempat A sebagai tempat C??
tolong di balas yahhh,,butuh banget nih,,terima kasih
tinggal dimodifikasi saja mas, berarti after insert kolom A, kemudian insert ke tempat C.
salam kenal pak budi, mengenai triggers yang bapak buat contoh untuk triggers dengan script ini tidak bisa di create ke mysql.
=================================
CREATE TRIGGER jual_barang after INSERT ON jual
FOR EACH ROW BEGIN
UPDATE stok
SET jumlah = jumlah – NEW.jumlah
WHERE
kd_barang = NEW.kd_barang;
END$$
=================================
terjadi kesalahan
SQL Error: 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 ‘END$$’ at line 1
=================================
mohon dikoreksi dan dibalas script mana yang salah ?
terima kasih, salam.
pak.. limitter editor di bawah silahkan diberi tanda $$
karena itu merupakan batas sebuah script trigger.. saya sudah mencoba dan berhasil, silahkan dikoreksi kembali pak
saya sudah mencoba ternyata berhasil, trima kasih atas saran dari bapak. saya sedang latihan database, mohon bantuannya jika saya membutuhkan nantinya pak. salam
ya pak.. sama2
dengan senang hati
makasih pak,tutorialnya mudah banget dipahami.Saya mo tanya misalkan dibuat trigger untuk insert data baru, kemudian setelah itu update kolom tertentu pada tabel yang sama caranya gimana ya..?misalkan,tabel pinjaman, insert NoKas keluar,NoAnggota,Pinjaman,BungaPinjaman trus langsung update field jumlahbunga (Pinjaman * bungaPinjaman)…Makasih jawabannya
menggunakan crosstabquery pak atau pm saja di id ym saya : putrablora
asslm.salam indonesia
pak saya mau tanya, kan saya udah Membuat Trigger jual_barang
ternyata berhasil di mysqlnya,,tetepi ketika di insert tabel barangnya ternyata error
MySQL said: ?
#1054 – Unknown column ‘jumlah–NEW.jumlah’ in ‘field list’
maksunya kenapa.
muhon bantuanya
Trima Kasih
tabel sudah dibuat belum pak??yang saya sertakan di atas triger saya?? artinya disitu ada warning : #1054 – Unknown column ‘j’ in ‘field list’
artinya kesalahan ada di kata : umlah–NEW.jumlah
nubi ikutan nanya pak
kalau mau bikin trigger secara terjadwal dan terus menerus bagaimana syntaknya?
misalkan ada 2 tabel A (nama_barang dan waktu) dan tabel B (id, nama_barang)
mau saya jika ‘waktu’ di tabel A = sekarang, kemudian otomatis isi tabel A di insert ke tabel B
bisa tidak kasus tersebut diselesaikan pake mysql trigger?
kalau tidak bisa, ada solusi lain?
terimakasih sebelumnya pak
triggernya pake if aja pak andy..
Sy mau tanya nih mas, trigger itu bersifat temporary dalam artia harus slalu dibuat atau cukup 1 kali buat saja? Trims atas infonya…
Untuk Back Up Database saya menggunakan mysqldump pada saat di database saya backup, triggernya gak ikut ke backup gimana cara supaya trigger dan function bisa ikutan terbackup
saat ini saya belum menemukan ilmu tersebut pak, saya bisa belajar jika bapak sudah menemukan caranya..
agan budi tq sekali sangat berguna infonya…
kalo bisa dalam format PDF atau word ya om, pasti nanti saya langsung download deh…
hehehhe
tq om
oke
Terima Kasih banyak, ilmu ini sangat berguna bagi anak didik sy
Gan mohon bantuannya..
seperti kasus yg diatas,,saya mau membuat 2 trigger pada satu tabel..trigger pertama utk update di tabel stok dan trigger kedua maunya untuk insert tbel penjualan…nah 2 trigger itu aktif jika ada insert di tabel detail_penjualan.
kalo seperti itu,,gmn yg Gan triggernya?
apa harus pake store procedure gitu?
sebelumnya,,terimakasih utk bantuannya..
gan mohon bantuannya
sy masih bingung mengenai triggger…
sy send via e-mail kasusnya ..?
sebelum dan sesudahnya trimakasih
keren dehh .. thanks bang .. jadi bisa ngebantu tugas tugas sekolah ahahhaa
pa… saya butuh bantuan.
ada masalah di update stock jg.
saya lg tugas akhir…
kalo kasus diatas kan ditabel beli sama jualnya ada kode_barang..
kalo saya adanya id_barang, sedangkan id_barang adalah auto_inceremet