Membuat Otomatisasi MySQL dengan Trigger

Barusan diminta sama bos (DR. Hasyim Gautama) untuk membuat otomatisasi membalas sms pada aplikasi sms gateway yang sudah aku implementasikan. Setelah googling beberapa saat, dapat cara untuk membuat trigger di mysql.

A trigger is a stored procedure that is invoked when a particular event occurs. For example, you can install a stored procedure that is triggered each time a record is deleted from a transaction table and that automatically deletes the corresponding customer from a customer table when all his transactions are deleted. (MySQL Manual)

Jadi suatu event bisa diotomatisasi jika ada event lain yang telah terjadi. Sederhananya begitu. Di sini aku mengimplementasikan dengan mencoba pada dua hal.

1. Menginsert ke tabel lain dalam satu database.
Pada kasus ini untuk membuat sms balasan, caranya cukup mengatur agar setiap ada isian baru di tabel inbox, mysql otomatis meng-insert isian baru ke tabel outbox.
Karena pada aplikasi sms gateway ini sudah ada daemon khusus, maka otomatis isian tabel outbox akan dikirim sebagai pesan sms.

Ini sintaksnya : (cukup sebagai refernsi saja, tergantung struktur database dan tabelnya)

DELIMITER//
CREATE TRIGGER test AFTER INSERT ON inbox
FOR EACH ROW BEGIN
INSERT INTO outbox VALUES (sysdate(),sysdate(),(SELECT SenderNumber FROM inbox),'Default_No_Compression','Terima kasih. Laporan Anda akan segera ditindak lanjuti.',sysdate(),'yes');
END;
//DELIMITER

Untuk lebih jelas tentang trigger di atas, mungkin perlu diketahui struktur tabel outbox adalah seperti ini (nama field dan tipe datanya) :
·    `UpdatedInDB` timestamp
·    `InsertIntoDB` timestamp
·    `SendingDateTime` timestamp
·    `Text` text
·    `DestinationNumber` varchar(20)
·    `Coding` enum(‘Default_No_Compression’, ‘Unicode_No_Compression’, ‘8bit’, ‘Default_Compression’, ‘Unicode_Compression’)
·    `UDH` text
·    `Class` int(11)
·    `TextDecoded` varchar(160)
·    `ID` int(11) unsigned
·    `MultiPart` enum(‘false’,’true’)
·    `RelativeValidity` int(11)
·    `SenderID` text
·    `SendingTimeOut` timestamp
·    `DeliveryReport` enum(‘default’,’yes’,’no’)
·    `CreatorID` text

Sedangkan struktur tabel inbox seperti ini (nama field dan tipe datanya):
·    `UpdatedInDB` timestamp
·    `ReceivingDateTime` timestamp
·    `Text` text
·    `SenderNumber` varchar(20)
·    `Coding` enum(‘Default_No_Compression’, ‘Unicode_No_Compression’, ‘8bit’, ‘Default_Compression’, ‘Unicode_Compression’)
·    `UDH` text
·    `SMSCNumber` varchar(20)
·    `Class` int(11)
·    `TextDecoded` varchar(160)
·    `ID` int(11) unsigned
·    `RecipientID` text
·    `Processed` enum(‘false’, ‘true’)

2. Menginsert ke tabel lain yang berbeda database.
Pada kasus ini untuk membuat copy isian satu database ke database master. Caranya cukup mengatur agar setiap ada isian baru di tabel inbox (database slave), mysql otomatis meng-insert isian baru yang sama ke tabel inbox di database master.

Nama database slave adalah ‘smsd1’, sedangkan database masternya ‘smsd0’.
Berikut ini sintaksnya :

DELIMITER //
CREATE TRIGGER slave2master AFTER INSERT ON smsd1.inbox
FOR EACH ROW BEGIN
INSERT INTO smsd0.inbox VALUES ((SELECT UpdatedInDB FROM smsd1.inbox),(SELECT ReceivingDateTime FROM smsd1.inbox),(SELECT Text FROM smsd1.inbox),(SELECT SenderNumber FROM smsd1.inbox),(SELECT Coding FROM smsd1.inbox),(SELECT UDH FROM smsd1.inbox),(SELECT SMSCNumber FROM smsd1.inbox),(SELECT Class FROM smsd1.inbox),(SELECT TextDecoded FROM smsd1.inbox),(SELECT ID FROM smsd1.inbox),(SELECT RecipientID FROM smsd1.inbox),(SELECT Processed FROM smsd1.inbox),1);
END;
//DELIMITER;

9 responses to this post.

  1. cuma bisa bilang: “mantap Rie..”
    sayangnya otak gw yg cetek ni ga nyampe..

    cuma modal googling kok kai.. hehe

    Balas

  2. Posted by hp26 on Desember 16, 2008 at 3:13 pm

    siip bro. lanjtutin terus…! abis tu ….. ya lanjutin lagi….

    Balas

  3. ampe gw bengong 2 hari juga yang kamu omongin ga ngerti rie,,maklum beda jurusan

    Balas

  4. Posted by ratih_imoet on Desember 18, 2008 at 8:44 pm

    si AW ni postinganya g nambah2. mbok ya ditambahin, setidaknya bisa ngilangin stress. butuh benzodiazepin…mana benzodiazepin….mana benzodiazepin

    Balas

  5. Posted by joko on Januari 7, 2009 at 10:54 am

    wah terima kasih mas

    Balas

  6. wah,,,cck..cck….

    Balas

  7. Posted by karyanto on Maret 16, 2009 at 10:27 am

    saya mencoba tapi sering error “delimiter $ not understanding

    hmmm… lebih lanjut by email boleh mas, atau by YM, or GTalk.. keep sharing

    Balas

  8. Posted by masdeny on Maret 27, 2009 at 3:31 pm

    saya coba eror mas boleh minta pencerahan alamat dimana gitu?jd langsung ketemu

    alamat masih di jakarta timur mas, tapi kerja masih di BPS pusat, jakarta pusat. By email jg boleh kok, atau YM or GTalk

    Balas

  9. Casino 1249871172…

    Casino 1249871172…

    Balas

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: