Menyambung artikel sebelumnya mengenai fungsi trigger dalam database, pada kesempatan ini saya akan menulis artikel bagaimana cara membuat trigger dengan menggunakan database MySQL. Pada prinsipnya blok kode trigger semuanya sama meskipun beda database.
Kita akan membuat dua buah table sebagai contoh, seperti berikut :
- tb_artikel : untuk menyimpan data artikel.
- tb_artikel_log : untuk menyimpan berbagai perubahan yang terjadi pada table tb_artikel.
Tentunya kita telah membuat database sebelumnya, saya menggunakan database db_belajar sama seperti pada tutorial yang lain. Kemudian di database db_belajar buat table tb_artikel dengan sintak :
Buat table tb_artikel_log :
CREATE TABLE `tb_artikel_log` ( `log_id` int(8) NOT NULL AUTO_INCREMENT, `id` int(8) NOT NULL, `perubahan` enum('CREATE','UPDATE','DELETE') NOT NULL, `waktu` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`log_id`), CONSTRAINT `FK_artikel_log_id` FOREIGN KEY (`id`) REFERENCES `tb_artikel` (`id`) ON DELETE CASCADE ON UPDATE CASCADE )Buat trigger ketika menambahkan data baru :
CREATE TRIGGER `after_insert_artikel` AFTER INSERT ON `tb_artikel` FOR EACH ROW BEGIN SET @tipe = 'CREATE'; INSERT INTO tb_artikel_log (id, perubahan) VALUES (NEW.id, @tipe); ENDTrigger ketika update atau delete (dalam tutorial ini bukan delete yang sebenarnya, tetapi merubah status artikel) data :
Supaya lebih mudah memasukkan data, sekaligus melihat data yang tersimpan dan log dari perubahan data, akan lebih baik jika membuat satu halaman untuk melihatnya. Pertama buat file untuk koneksi ke database (db.php)
<?php define('DB_HOST', 'localhost'); define('DB_USER', 'root'); define('DB_PASS', ''); define('DB_NAME', 'db_belajar'); function connect() { $connect = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); if (mysqli_connect_errno($connect)) { die("Failed to connect:" . mysqli_connect_error()); } mysqli_set_charset($connect, "utf8"); return $connect; } ?>Kemudian buat file untuk Create, Read, Update, Delete data (contoh_trigger.php) :
<?php error_reporting(0); include "db.php"; $connect = connect(); if (!empty($_POST)) { if (empty($_GET['act'])) { $query = "INSERT INTO tb_artikel(judul,artikel) VALUES('" . $_POST['judul'] . "','" . $_POST['artikel'] . "')"; mysqli_query($connect, $query); } else { $query = "UPDATE tb_artikel SET judul = '" . $_POST['judul'] . "', artikel = '" . $_POST['artikel'] . "' WHERE id = '" . $_GET['id'] . "'"; mysqli_query($connect, $query); } } else { switch ($_GET['act']) { case "update" : $query = "SELECT * FROM tb_artikel WHERE id = '" . $_GET['id'] . "'"; $result = mysqli_query($connect, $query); $row = mysqli_fetch_assoc($result); break; case "delete" : $query = "UPDATE tb_artikel SET status = '1' WHERE id = '" . $_GET['id'] . "'"; mysqli_query($connect, $query); break; } } ?> <!DOCTYPE html> <head lang="en"> <meta charset="utf-8"> <title>Contoh Trigger MySQL </title> <style> .data th , .data td { border: 1px solid grey; border-collapse: collapse; padding: 5px; } .data tr:nth-child(odd) { background-color: #f2f2f2; } .data tr:nth-child(even) { background-color: #ffffff; } </style> </head> <body> <h2>Masukkan Data</h2> <form action="" method="post" name="inputdata"> <table border="0"> <tr> <td>Judul</td> <td><input type="text" name="judul" value="<?= $row['judul'] ?>" /></td> </tr> <tr> <td>Artikel</td> <td><textarea name="artikel"><?= $row['artikel'] ?></textarea></td> </tr> <tr> <td></td> <td><input type="submit" value="Simpan" name="simpan"></td> </tr> </table> </form> <br /> <h2>Daftar Artikel</h2> <table class="data" cellspacing="0" cellpadding="0"> <tr> <th>Judul</th> <th>Action</th> </tr> <?php $sql = "SELECT * FROM tb_artikel WHERE status is null"; if ($result = mysqli_query($connect, $sql)) { while ($row = mysqli_fetch_assoc($result)) { ?> <tr> <td><?= $row['judul'] ?></td> <td>[<a href="contoh_trigger.php?act=update&id=<?= $row['id'] ?>">update</a>] [<a href="contoh_trigger.php?act=delete&id=<?= $row['id'] ?>">delete</a>]</td> </tr> <?php } } ?> </table> <br /> <h2>Log Artikel</h2> <table class="data" cellspacing="0" cellpadding="0"> <tr> <th>Tanggal</th> <th>Judul</th> <th>Action</th> </tr> <?php $sql = "SELECT t1.*, t2.judul FROM tb_artikel_log AS t1 JOIN tb_artikel AS t2 ON t1.id = t2.id ORDER BY t1.log_id DESC"; if ($result = mysqli_query($connect, $sql)) { while ($row = mysqli_fetch_assoc($result)) { ?> <tr> <td><?= $row['waktu'] ?></td> <td><?= $row['judul'] ?></td> <td><?= $row['perubahan'] ?></td> </tr> <?php } } ?> </table> </body> </html>MySQL adalah database paling populer untuk membangun website, untuk panduan lengkapnya bisa cek di Cara Membuat Database di MySQL.
Selamat mencoba, terima kasih 🙂