Masih dalam pembahasan tentang mysql. Kali ini rumah code akan belajar tentang bagaimana caranya membuat trigger pada mysql database server. Tutorial ini akan menggunakan trigger dengan event AFTER, BEFORE - INSERT, UPDATE, DELETE.
Trigger adalah sebuah prosedur yang di eksekusi pada waktu ( AFTER, BEFORE ) dan pada event ( INSERT, UPDATE, DELETE ).
Query dasar trigger
CREATE TRIGGER 'nama_trigger'
WAKTU EVENT ON 'nama_tabel'
FOR EACH ROW SET new.artikel_tgl = now()
BEGIN
Query yang akan di eksekusi
END;
Baca Juga : Tutorial subquery alias dan fungsi pada mysql
kalau bingung saya akan jelaskan dengan contoh pada database penjualan
CREATE TABLE `barang` (
`barang_id` double NOT NULL,
`barang_nama` varchar(30) NOT NULL,
`barang_qty` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `barang`
--
INSERT INTO `barang` (`barang_id`, `barang_nama`, `barang_qty`) VALUES
(1, 'Tas Wanita', 100),
(2, 'Tas Pria', 100),
(3, 'Baju Wanita', 100),
(4, 'Baju Pria', 100),
(5, 'Celana Wanita', 100),
(6, 'Celana Pria', 100),
(7, 'Kaos Oblong', 100),
(8, 'Kemja Batik', 100);
-- --------------------------------------------------------
--
-- Table structure for table `transaksi`
--
CREATE TABLE `transaksi` (
`trx_id` double NOT NULL,
`user_id` varchar(20) NOT NULL,
`trx_tgl` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- --------------------------------------------------------
--
-- Table structure for table `trasaksid`
--
CREATE TABLE `trasaksid` (
`trxD_id` double NOT NULL,
`trx_id` double NOT NULL,
`barang_id` double NOT NULL,
`trx_qty` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- --------------------------------------------------------
--
-- Table structure for table `user`
--
CREATE TABLE `user` (
`user_id` varchar(20) NOT NULL,
`user_password` tinytext DEFAULT NULL,
`user_email` varchar(50) DEFAULT NULL,
`user_alias` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `user`
--
INSERT INTO `user` (`user_id`, `user_password`, `user_email`, `user_alias`) VALUES
('admin', '21232f297a57a5a743894a0e4a801fc3', 'admin@host.com', 'Admin'),
('adrian', '8c4205ec33d8f6caeaaaa0c10a14138c', 'adrian@gmail.com', 'Adriana'),
('andri', '6bd3108684ccc9dfd40b126877f850b0', 'andri@yahoo.com', 'Andriana'),
('ardi', '0264391c340e4d3cbba430cee7836eaf', 'ardi@gmail.com', 'Ardianan'),
('bagas', 'ee776a18253721efe8a62e4abd29dc47', 'bagas@rc.org', 'Bagas Adi'),
('bima', '7fcba392d4dcca33791a44cd892b2112', 'bima@google.com', 'Bima Satria'),
('herdi', '70ef423c063dfa178e58114b90052a9b', 'herdi@aol.com', 'Herdianan'),
('heri', '6812af90c6a1bbec134e323d7e70587b', 'heri@google.com', 'Heriana'),
('lili', '777bbb7869ae8193249f8ff7d3e59afe', 'lili@bing.com', 'Lilianan'),
('novi', '832f72b7a13b2cedcfb108603a10e2a6', 'novi@gmail.com', 'Noviana'),
('rudi', '1755e8df56655122206c7c1d16b1c7e3', 'rudi@yahoo.com', 'Rudiana'),
('wisnu', '202cb962ac59075b964b07152d234b70', 'wisnu@yahoo.com', 'wisnu i'),
('yuli', '4a01a05a350e1c7710c989f1211245a8', 'yuli@gmail.com', 'Yulianan');
Baca Juga : Perintah dasar Mysql
Setelah selesai membuat database dan tabel di atas barulah kita dapat melanjutkan mysql trigger tutorial
Baca Juga : Belajar Query Dasar Mysql
Contoh MySQL Trigger Before Insert
CREATE TRIGGER `tanggal` BEFORE INSERT ON `transaksi` FOR EACH ROW SET new.trx_tgl = now()
Contoh Mysql trigger di atas bersfungsi untuk memberikan nilai pada field trx_tanggal setelah lita menambahkan data pada tabel transaksi
Contoh MySQL Trigger Before Update
CREATE TRIGGER `tanggal1` BEFORE UPDATE ON `transaksi` FOR EACH ROW SET new.trx_tgl = now()
trigger di atas memiliki fungsi yang sama cuman triger ini dilakukan sebelum kita mengupdate data pada tabel transaksi
Contoh MySQL Trigger After Insert
Trigger after insert ini akan saya buat sedikit rumit karena saya akan menambahkan variabel pada trigger
Mendeklarasikan variabel pada trigger
DECLARE oval INT(10);
DECLARE nval INT(10);
membuat nilai pada variabel trigger
saya akan mengisi variabel oval dengan mengambil nilai barang_qty dari tabel barang, sedangkan variabel nval adalah nilai dari variabel oval dikurangi nilai dari data yang kita masukan dari field trx_qty
SET oval = (select barang_qty from barang where barang_id = new.barang_id);
SET nval = oval - new.trx_qty;
Query Yang akan di eksekusi pada triger ini adalah mengupdate tabel lain yaitu tabel barrang setelah kita menambahkan data pada tabel transaksid
UPDATE `barang`
SET `barang_qty` = nval
WHERE CONCAT(`barang`.`barang_id`) = new.barang_id;
Perintah keseluruhan dari triger after insert ini adalah
CREATE TRIGGER `update_barang` AFTER INSERT ON `trasaksid` FOR EACH ROW BEGIN
DECLARE oval INT(10);
DECLARE nval INT(10);
SET oval = (select barang_qty from barang where barang_id = new.barang_id);
SET nval = oval - new.trx_qty;
UPDATE `barang`
SET `barang_qty` = nval
WHERE CONCAT(`barang`.`barang_id`) = new.barang_id;
END
Contoh MySQL trigger after delete
CREATE TRIGGER `hapus` AFTER DELETE ON `transaksi` FOR EACH ROW DELETE FROM `transaksid` WHERE `transaksid`.` trx_id` = old.trx_id;
demikian lah tutorial trigger mysql ini semoga dapat membantu teman teman dalam memahami tentang trigger pada mysql.