Cara Mudah Membuat History Edit Dengan Trigger MySQL
Jadi dalam kasus kali ini kita akan belajar bagaimana membuat sebuah history pada tabel mysql/mariadb yang telah diedit/update/diubah. Jadi setiap update/perubahan yang dilakukan oleh user baik dari secara langsung dari tabel database server mysql ataupun melalui PHP, maka perubahan tersebut akan dicatat riwayatnya atau disimpan didalam tabel tertentu.
Saya akan memberikan sebuah contoh termudah bagaimana mencatat riwayat perubahan atau edit pada sebuah tabel tanpa harus menggunakan kode php, tetapi memanfaatkan fitur trigger mysql/mariadb. Dan tentunya ini lebih efisien dibandingkan Anda menggunakan kode PHP
Dan berikut ini adalah Cara Mudah Membuat History Edit Dengan Trigger MySQL
Sebelumnya saya ingin mengilustrasikan terlebih dahulu bagaimana nantinya history ini akan berjalan.
- Saya memiliki sebuah tabel dengan nama payment_list
- Kemudian ketika setiap proses UPDATE pada tabel tersebut maka perubahannya akan dicatat
- Maksud perubahan dicatat adalah nilai perubahannya seperti apa, nama payment barunya terus berapa nilai payment barunya dsb.
Supaya ilustrasi diatas lebih jelas lagi, maka Anda bisa membuat sebuah database baru lalu jalankan query berikut :
CREATE TABLE `payment_list_history` (
`id_history` int(10) UNSIGNED NOT NULL,
`payment_list_id` int(10) UNSIGNED DEFAULT NULL,
`payment_name` varchar(65) DEFAULT NULL,
`payment_amount` decimal(10,0) NOT NULL,
`payment_edited` int(10) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `payment_list_history`
--
ALTER TABLE `payment_list_history`
ADD PRIMARY KEY (`id_history`),
ADD KEY `id_history` (`id_history`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `payment_list_history`
--
ALTER TABLE `payment_list_history`
MODIFY `id_history` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
CREATE TABLE `payment_list` (
`id` int(10) UNSIGNED NOT NULL,
`payment_name` varchar(65) DEFAULT NULL,
`payment_code` varchar(25) DEFAULT NULL,
`payment_amount` decimal(10,0) NOT NULL,
`payment_submit` int(10) UNSIGNED DEFAULT NULL,
`payment_created` datetime NOT NULL,
`payment_updated` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `payment_list`
--
INSERT INTO `payment_list` (`id`, `payment_name`, `payment_code`, `payment_amount`, `payment_submit`, `payment_created`, `payment_updated`) VALUES
(1, 'SPP 1', '56484', '5000', 2, '2022-09-30 15:31:13', '2022-09-30 08:31:39');
ALTER TABLE `payment_list`
ADD PRIMARY KEY (`id`),
ADD KEY `id` (`id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `payment_list`
--
ALTER TABLE `payment_list`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
Sehingga kurang lebih nanti Anda akan memiliki 2 buah tabel seperti berikut :
- tabel payment_list berisi daftar nama – nama pembayaran
- tabel payment_list_history berisi catatan perubahan baru
Supaya setiap perubahan pada tabel payment_list dicatat apa perubahannya maka lakukan langkah – langkah berikut :
- Klik tabel payment_list
- Kemudian klik Triggers / Add Trigger
- Pada box event tambahkan query seperti berikut atau seperti yang terlihat pada gambar diatas
INSERT INTO payment_list_history VALUES(0,NEW.id,NEW.payment_name, NEW.payment_amount, NEW.payment_submit)
- Jika sudah selesai klik Go
Untuk melihat apakah trigger yang dibuat diatas bekerja Anda bisa mencoba melakukan update/edit pada data yang tersedia di tabel payment_list
Perlu digaris bawahi bahwa TRIGGER diatas akan menghasilkan atau mencatat nilai baru yang di updatenya, bukan mengambil nilai sebelum di update, jika Anda ingin mengambil nilai sebelum diupdate/dirubah gunakan Time BEFORE kemudian parameter NEW ganti dengan OLD
anak saya lagi ingin ajarin koding mysgl
ReplyDeletewah kebetulan juga ya
bisa jadi bahan praktek