Mencatat Log pada MySQL menggunakan Trigger

Hampir setiap DBMS (Database Management System) memiliki fungsi Trigger.
DBMS yang digunakan untuk kasus ini adalah MySQL.


Apa itu Trigger?
A database trigger is procedural code that is automatically executed in response to certain events on a particular table or view in a database. The trigger is mostly used for maintaining the integrity of the information on the database. (http://en.wikipedia.org/wiki/Database_trigger)
A trigger is defined to activate when an INSERT, DELETE, or UPDATE statement executes for the associated table. (http://dev.mysql.com/doc/refman/5.0/en/triggers.html)
atau bisa dibilang
Trigger adalah sekumpulan perintah atau sintaks yang akan secara otomatis dijalankan jika terjadi operasi tertentu pada tabel.
Pembuatan umum trigger pada MySQL bisa dibuat dengan perintah sebagai berikut:
CREATE TRIGGER name
[BEFORE|AFTER] [INSERT|UPDATE|DELETE]
ON tablename
FOR EACH ROW statement
Note:

  • name adalah nama Trigger.
  • [BEFORE|AFTER] digunakan untuk menentukan kapan Trigger dieksekusi.
  • [INSERT|UPDATE|DELETE] digunakan untuk menentukan proses yang dijadikan untuk penggunaan Trigger.
  • tablename adalah nama tabel yang akan menjadi patokan Trigger.
  • statement perintah atau query yang akan dijalankan.


Ok, untuk mudahnya, lebih baik implementasi langsung ya

Note:
Salin satu persatu perintah dibawah ini dan eksekusi!

Pembuatan Database
CREATE DATABASE IF NOT EXISTS `contoh_db`;
Pembuatan Tabel
USE `contoh_db`;

DROP TABLE IF EXISTS `contoh`;

CREATE TABLE `contoh` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data_tbl` varchar(20) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MYISAM DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `log`;

CREATE TABLE `log` (
  `ket` text NOT NULL,
  `datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user` varchar(50) NOT NULL DEFAULT '',
  `old_data` varchar(25) NOT NULL DEFAULT '',
  `new_data` varchar(25) NOT NULL DEFAULT '' ) ENGINE=MYISAM DEFAULT CHARSET=latin1;
 Pembuatan Trigger
USE `contoh_db`;

DELIMITER $$
DROP TRIGGER IF EXISTS `after_insert` $$
CREATE TRIGGER `after_insert` AFTER INSERT ON `contoh`
FOR EACH ROW
BEGIN
  INSERT INTO LOG (ket, user, new_data)
  VALUES (CONCAT('Insert data ke tabel contoh, id = ', NEW.id), USER(), NEW.data_tbl);
END $$
DELIMITER ;

DELIMITER $$
DROP TRIGGER IF EXISTS `after_update` $$
CREATE TRIGGER `after_update` AFTER UPDATE ON `contoh`
FOR EACH ROW
BEGIN
  INSERT INTO LOG (ket, USER, new_data, old_data)
  VALUES (CONCAT('Update data ke tabel contoh, id = ', NEW.id), USER(), NEW.data_tbl, old.data_tbl);
END $$
DELIMITER ;

DELIMITER $$
DROP TRIGGER IF EXISTS `before_delete` $$
CREATE TRIGGER `before_delete` BEFORE DELETE ON `contoh`
FOR EACH ROW
BEGIN
  INSERT INTO LOG (ket, USER, old_data)
  VALUES (CONCAT('Delete data ke tabel contoh, id = ', OLD.id), USER(), OLD.data_tbl);
END $$
DELIMITER ;
Dari perintah diatas, ada beberapa yang perlu diperhatikan.

  • USER(), adalah fungsi bawaan MySQL yang mengembalikan data IP/ComputerName
  • OLD.nama_field, adalah data yang belum dirubah atau data lama (Perhatikan letak penggunaannya)
  • NEW.nama_field, adalah data yang sudah dirubah atau data baru (Perhatikan letak penggunaannya)


Jika sudah kalian eksekusi, saatnya kalian untuk melakukan Insert, Update dan Delete ke tabel Contoh.
Seandainya berhasil, tabel Log akan terisi dengan data pencatatan terhadap tabel Contoh.

Untuk menghapus Trigger, kalian bisa menggunakan perintah
USE `contoh_db`;

DROP TRIGGER `after_insert`;
DROP TRIGGER `after_update`;
DROP TRIGGER `before_delete`;

Semoga bermanfaat

Terima kasih kepada:
My Jesus, My Everything
My Mom, Sister & Brother
BSI BTI (Pak Rahdian)
and All of My Friends
 
 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2011. Gary Abraham's Blog - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger