Announcement

December 2009
M T W T F S S
« Nov   Jan »
 123456
78910111213
14151617181920
21222324252627
28293031  

Archives

Categories

Tags

Where are You From?

Membuat TRIGGER pada database MySQL

Trigger adalah suatu prosedur yang otomatis akan dijalankan apabila “pemicu” dari trigger itu dipanggil.

sebagai contoh: penghapusan satu tabel akan memicu suatu trigger untuk menghapus pada tabel yang lain yang telah ditunjuk terlebih dahulu. dibawah ini saya berikan satu contoh penggunaan trigger pada database MySQL.

Sebagai contoh kita siapkan terlebih dahulu sebuah database dan tabel yang akan diuji coba seperti dibawah ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create database mytrigger;
 
create table coba (
kode varchar(5) not null,nama varchar(35) not null,
primary key (kode))
 
create table coba2 (
kode varchar(5) not null,nama varchar(35) not null,
primary key (kode))
 
create table tran (
kode varchar(5) not null,
kodetran varchar(5),jumlah double,
primary key nkode (kode,kodetran))

Kemudian buatlah sebuah trigger dengan kode seperti dibawah ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
delimiter $$
 
create trigger auto_insert_coba2
before insert on coba for each row
begin
  insert into coba2 (kode,nama) values (NEW.kode,NEW.nama);
end$$
 
create trigger auto_update_coba2
before update on coba for each row
begin
  update coba2 set nama=NEW.nama where kode=NEW.kode;
end$$
 
create trigger auto_delete_coba2
before delete on coba for each row
begin
delete from coba2 where kode=OLD.kode;
delete from tran where kode=OLD.kode;
end$$

pada trigger di atas setiap kali perubahan dilakukan terhadap tabel COBA maka secara otomatis
tabel COBA2 akan dipengaruhi / terpengaruh.
Pembuatan trigger ini dapat digunakan untuk berbagai keperluan, selamat mencoba…..!

Jangan lupa untuk memberikan komentar anda. terima kasih.

50 comments to Membuat TRIGGER pada database MySQL

  • britantyo

    wuaduoh mas…ndak iso iku…kok gak bisa yaaa waktu create trigger auto_insert_coba2, keluarnya begini nih :

    ERROR 1064 (42000): 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 1

    ak pakenya mysql 5.0 loh…bug yah…kalo

  • saya udah coba lagi ok tuh perintahnya…

    hmmmm kalau pembuatan trigger tersebut langsung pada kotak SQL maka perintah

    delimiter $$

    nggak perlu diketikkan tetapi langsung ketikkkan $$ pada kotak input

    lihat gambarnya disini:

    http://farm5.static.flickr.com/4015/4295472060_0eaf0b2499_o.jpg
    .-= anto2k´s last blog ..KEBOCORAN DOKUMEN PENTAGON =-.

  • selamat mencoba ya… ehm kalau diberi cendol :cendol

    kagak keberatan nich….

  • 1. pada baris satu, coba ubah menjadi:
    create database if not exsists mytrigger;

    2. setelah create table (….) akhiri dengan ‘;’
    .-= windu purnomo´s last blog ..Praktikum Algoritma dan Pemrograman =-.

  • :thanks2 terima kasih mr Windu

    that’s good solution

  • Biar lebih afdol, ikutan nimbrung bahas mengenai trigger nich. http://bit.ly/TriggerMySQL
    .-= achmatim´s last blog ..Mengenal Trigger di MySQL =-.

  • MATUR SUWUN MAS ANTOK.. tolong add ym saya :putrablora fb : fb_putra@yahoo.co.id
    Semaleman saya cari triger, habis sbuh saya baru ketemu dengan web njenengan.. thenqu.. silahkan mampir di blog saya
    .-= budi setyawan´s last blog ..PHP PAGINATION MySQL =-.

  • kalo implementasinya pada program gimana mas? oh ya saya pakai delphi. tanks

  • ea….. kak mksih…..

  • al

    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

  • bisa kasih contek ga yang melibatkan varible

    saya buat kok ga bisa ya…

    DELIMITER ;;
    CREATE TRIGGER `trg_isi_1` BEFORE INSERT ON `tbl_data` FOR EACH ROW BEGIN
    declare nilai_akhir text ;
    select nilai_akhir into nilai_akhir from tbl_master where kode =’a’
    SET NEW.item_id = nilai_akhir ;
    END;;
    DELIMITER ;

  • Mohon pencerahannya kok waktu saya coba triggernya keluar ini…

    #1235 – This version of MySQL doesn’t yet support ‘multiple triggers with the same action time and event for one table’

  • Grou, mysqlnya minimal versi 5?

  • mas aryanto, saya mau nanya dan mohon langsung saja lihat pada ilustrasi dibawah ini

    begin // Begins fungsi nya untuk apa?
    insert into coba2 (kode,nama) values (NEW.kode,NEW.nama);
    end$$

    apakah kalo buat 1 trigger harus pake begins juga?

  • vic

    mas bisa bantuin nga aku mau buat sms gateway pemilihan(poling) tapi aku bingung buat trigernya…aku punya contoh triger aku dpat dari artikel di internet
    ini triger yg aku dapat beserta syntax mysql nya:
    ini mysqlnya
    CREATE TABLE `data_polling` (
    `pilihan` varchar(25) NOT NULL,
    `vote` int(11) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    – Data pilihan voting
    INSERT INTO `data_polling` VALUES (‘glenn’, 0);
    INSERT INTO `data_polling` VALUES (‘afghan’, 0);
    INSERT INTO `data_polling` VALUES (‘rossa’, 0);
    INSERT INTO `data_polling` VALUES (‘krisdayanti’, 0);

    ini trigernya:
    **********************trigger*************************
    delimiter $
    create trigger
    smsd.sms
    AFTER
    INSERT
    on
    smsd.inbox
    for each row BEGIN
    DECLARE smsx,smsz,smsmasuk varchar(200);
    DECLARE format,pilihansms,no_pengirim varchar(200);
    DECLARE error,x,jmlvote int;

    set smsz=new.TextDecoded;
    select ltrim(smsz) into smsx;
    select rtrim(smsx) into smsmasuk;
    set no_pengirim=new.SenderNumber;
    select substring_index(smsmasuk,’ ‘,1) into format;
    select substring(smsmasuk,6) into pilihansms;
    select count(pilihan) from polling.data_polling
    where pilihan=pilihansms into x;
    select vote from polling.data_polling
    where pilihan=pilihansms into jmlvote;
    set jmlvote=jmlvote+1;
    set error=0;

    if format=’idol’ and x>0 then
    update polling.data_polling set vote=jmlvote where pilihan=pilihansms;
    else
    set error=1;
    end if;

    if error=1 then
    insert into smsd.outbox values (”, ”, ”, NULL, no_pengirim, ‘Default_No_Compression’, NULL, -1, ‘Maaf,format yang anda masukkan salah. Silahkan kirim ulang’,”, ‘false’,-1, ”, ”, ”, ”);
    end if;

    if error=0 then
    insert into smsd.outbox values (”, ”, ”, NULL, no_pengirim, ‘Default_No_Compression’, NULL, -1, ‘Terimakasih,pilihan anda telah kami tampung’,”, ‘false’,-1, ”, ”, ”, ”);
    end if;

    END;
    $
    **********************trigger*************************
    bisa bantuin nga mas apa syntax trigernya udah benar..?
    terima kasih….

  • craz

    pak klo di pemogramn java kode nya sama kaya di atas

  • craz, rasa2nya sih sama gitu. sebab triggernya dibuat langsung di dalam database mysql, tapi aq belum pernah nyoba, silahkan jika ada agan yang telah mencoba share disini, monggo…..
    :lapar

  • Pak kalo saya punya kasus pd lelang barang, misalnya saya melelang barang slma 3 hari, saya melelang tgl 1 brarti nanti tgl 3 status barang diupdate menjadi expired….gmn tuh pak caranya….tanpa melibatkan scrip php…cukup di mysql aja trims

  • yanno, kalau itu aq belum pernah coba, namun, sebuah trigger seperti yg dijelaskan diatas harus ada ‘pemicu’ nya terlebih dahulu. bisa jadi anda dapat menggunakan procedure yg digabung dengan trigger mysql, coba baca kembali manual mysqlnya. Jadi pada program lelang, setiap index.php dipanggil maka menjalankan procedure pengecekkan barang-barang yang sudah expired. demikian selamat mencoba dan berkreasi kalau udah selesai mohon sharing nya….

    :lapar

  • uci suicide

    Gini saya buat tabel mysql isinya kira-kira seperti ini

    mysql> desc data;
    +———–+————-+——+—–+———+—————-+
    | Field | Type | Null | Key | Default | Extra |
    +———–+————-+——+—–+———+—————-+
    | id | int(5) | NO | PRI | NULL | auto_increment |
    | reporter | varchar(50) | NO | | NULL | |
    | tps | varchar(5) | NO | | NULL | |
    | desa | varchar(50) | NO | | NULL | |
    | kecamatan | varchar(50) | NO | | NULL | |
    | dapil | varchar(30) | NO | | NULL | |
    | pas1 | int(11) | NO | | NULL | |
    | pas2 | int(11) | NO | | NULL | |
    | pas3 | int(11) | NO | | NULL | |
    | pas4 | int(11) | NO | | NULL | |
    | pas5 | int(11) | NO | | NULL | |
    +———–+————-+——+—–+———+—————-+
    11 rows in set (0.00 sec)

    mysql>

    Mohon saya dibantu bagaimana cara buat trigger agar tabel data tersebut bisa di input melalui sms..

    engine sms gateway saya menggunakan gammu, jadi ketika sms yang dikirim ke nomer tujuan, otomatis akan masuk ke tabel inbox bawaan gammu.. gimana caranya sms yang dikirim dengan format tertentu misalnya begini

    agus irawan,2,luhu,telaga,kab.belibis,111,222,333,444,555

    bisa diparsing sehingga ikut ter input ke tabel data dalam mysql tadi..??

    saya bingung membuat triggernya dan kalupun tidak menggunakan trigger ada tidak solusi yang lain…

    terima kasih

  • coba gunakan PROCEDURE tersimpan yg ada di MySQL (silahakan baca kembali tentang PROCEDURE)

    :travel

  • Makasih pak infonya, lagi ada tugas dari dosen nih tentang trigger. abis baca ini jadi ada pencerahan :)

  • Makasih pak, tulisanmu telah menyelesaikan masalahku….
    btw, ada nggak contoh sederhana store procedure???
    trimakasi h banyak….
    :)
    :2thumbup :toast

  • tq. cendolnya he.he.he

    :peluk

  • jin

    pak, saya kesusahan dengan masalah durasi di aplikasi pakir yang saya buat bisa membantu g ?
    saya tdk bisa untuk menghitung biaya parkirnya.
    bisa saya kirim programnya dan mysqlnya. Mohon dibantu pak,

  • @jin: susahnya di sourcenya atau logikanya nich, coba dech kamu kirimkan ke emailku aplikasinya biar aq coba bantuin check codingnya

  • Om,,,kalo ane mau delete trigger ane yang ada relasinya

    misalkan ane delete id_pendaftar=”1″ pada tabel pendaftar maka rows id_pendaftar=”1″ di tabel nilai_kuant juga otomatis akan kehaapus bagaimana ya om??
    :sup2: :sup2:

  • ini masalah ane ane share di sene om…….

    http://www.i-bego.com/mysql/logika-if-di-create-trigger-procedure-mysql-t2821.html

    :nohope

    ane minta emailnya om kalo boleh

  • herwin

    pak, saya sudah membuat triggernya..

    untuk melihat isi dari trigger tersebut bagaimana caranya?

    dan, trigger itu kan log, apakah ada file nya di direktori ?

    trims

  • coba gunakan software SQLYOG

  • @anto2k
    Wah berbeli itu mas, awas jangan pakai bajakan.
    visit my blog http://sugik.do-event.com/

  • @mbahsono: ho’oh, emang berbeli. atau coba juga yang gratisan heidisql.com, selamat mengunduh ya.

  • anwar

    mas, saya lagi kebingungan dalam menyelesaikan Tugas Akhir Kuliah saya.
    kasusnya pada SMS Gateway,

    pada inbox seperti ini, “L 4562 WE#anwar#VIXION#2011#dst. . .”
    saya bingung bgaimana caranya insert ke fild2 dalam dtabase dengan tanda pagar sbg pemisah,,apa bisa menggunakan trigger??

  • Yoga Putra

    gan, klo gak salah ni trigernya buat sql server ya? bukan buat mysql front?

  • Terimakasih om ilmunya…

  • @anwar: mohon maaf banget belum pernah nyoba, tapi aplikasinya pakai apa yak??
    @yoga: buat database mysql mas….
    @ffredie: ma kasih kembali, senang bisa membantu anda….semoga sukses…

    :2thumbup

  • Thanks buat sharingnya, saya coba dulu…
    apakah ini seperti STORE PROCEDURE?

    thanks,

    http://www.roniwahyu.com
    http://www.roniwahyu.web.id/
    http://www.wisatapedia.com

    :2thumbup :2thumbup

  • Herman

    Pak saya mau tanya bagaimana script trigger supaya tidak terjadi hasil min pada tabel stock barang jika ada pengeluaran barang yang lebih banyak daripada jumlah yang terdapat di table stock?

    mohon bantuannya …

  • mas anto sya mw tnya kalo trigger untuk total harga yang di dapat dari beberapa tabel berbeda gmn??
    maav kalo pertanyaan saya sulit di mengerti soalnya sya msih pelajar….(baru belajar mysql)….!

  • @herman: mungkin harus diikutkan dengan pemanggilan prosedur tersimpannya, coba baca kembali penggunaan procedure di dalam database mysql.

    @zhalsyah: sama sy juga baru belajar…(piss :D ), tinggal dimasukkan saja menggunakan variabel, coba latihan menggunakan tabel-tabel yg sederhana dulu misalnya: tabel1, tabel2, tabel3 trus di cari solusinya, aq yakin anda bisa, selamat otak-atik ya, semoga berhasil…

    :cendol

  • @roniwahyu: bukan, kalau prosedur tersimpan eksekusinya harus dipanggil dulu melalui fungsi CALL, tapi kalau trigger dia otomatis dijalankan asal ada pemicunya, perhatikan ilustrasi penggunaan di atas, demikian semoga membantu.

    :ngacir2

  • ezy

    pak saya mau nanya tentang pengecekan stok barang ni….
    jadi kasusnya gini pak, ketika terjadi penjualan dan stok barng tersebut nol,muncul peringatan bahwa stok habis & data ga tersimpan. kalo kasusnya seperti itu bisa pake trigger ga pak? dan kode triggernya gmn pak….??? mohon bantuannya pak…

  • @ezy: kalo kasusnya seperti itu sebaiknya pake procedure untuk melakukan pengecekan dulu terhadap saldo unit barang menggunakan STORED PROCEDURE… :beer:

  • :shakehand2 haturnuhun kang anto2k,
    tapi maksud ada tabel tran itu apa ya? :bingung

  • @akang mayer: tabel tran sebagai contoh saja, dalam kasus di atas misalkan tabel tran berfungsi menyimpan berbagai transaksi yang terkait tabel coba dan coba2. tabel coba dan coba2 adalah file master (kode barang sebagai contoh) maka apabila kita menghapus masternya yang ada di tabel kode barang maka secara otomatis akan menghapus seluruh transaksi yg terkait tabel tersebut di tabel tran.

    Jadi kemungkinan missing link dapat dihindari….
    demikian…
    :cystg

  • cara kombinasi trigger dengan pernyataan conditional (if..else) gimana???

  • @yuki: binggung mode on (alias belum nyoba he.he.he.he) silahkan dech cari artikel ama yg lebih ahli atau tanyak mbah kangkung koe tuh si google….
    :angel

  • Terima kasih untuk membuat upaya tulus untuk berbicara tentang hal ini. Saya merasa sangat kuat tentang hal itu dan ingin membaca lebih lanjut. Jika OK, karena Anda mencapai kebijaksanaan yang luas ekstra, mungkin Anda keberatan termasuk artikel tambahan yang mirip dengan yang satu ini dengan info tambahan? Ini akan sangat berguna dan bermanfaat bagi saya dan teman-temanku.

  • :mewek walau aq kagak ngerti apa maksudna…????

  • Terimakasih,informasi ini sangat berharga
    saya memang sedang mencari tutorial trigger dalam bahasa Indonesia

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

[+] kaskus emoticons nartzco

 
What is 13 + 0 ?
Please leave these two fields as-is: