Anda di halaman 1dari 5

Tutorial Membuat Trigger Dengan

Menggunakan Database MySQL


APRIL 8, 2017 / YUDANA / 3 COMMENTS

FacebookTwitterGoogle+

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 :

1. tb_artikel : untuk menyimpan data artikel.

2. 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 :

1 CREATE TABLE `tb_artikel` (


2 `id` int(8) NOT NULL AUTO_INCREMENT,
3 `judul` varchar(100),
4 `artikel` text,
5 `status` tinyint(1),
6 PRIMARY KEY (`id`)
7)

Buat table tb_artikel_log :

CREATE TABLE `tb_artikel_log` (


1
`log_id` int(8) NOT NULL AUTO_INCREMENT,
2
`id` int(8) NOT NULL,
3
`perubahan` enum('CREATE','UPDATE','DELETE') NOT NULL,
4
`waktu` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
5
PRIMARY KEY (`log_id`),
6
CONSTRAINT `FK_artikel_log_id` FOREIGN KEY (`id`) REFERENCES `tb_artikel` (`id`) ON DELETE CASCADE ON
7
UPDATE CASCADE
8
)

Buat trigger ketika menambahkan data baru :

1 CREATE TRIGGER `after_insert_artikel`


2 AFTER INSERT ON `tb_artikel` FOR EACH ROW
3 BEGIN
4 SET @tipe = 'CREATE';
5 INSERT INTO tb_artikel_log (id, perubahan) VALUES (NEW.id, @tipe);
6 END

Trigger ketika update atau delete (dalam tutorial ini bukan delete yang sebenarnya,
tetapi merubah status artikel) data :
1 CREATE TRIGGER `after_update_artikel`
2 AFTER UPDATE ON `tb_artikel` FOR EACH ROW
3 BEGIN
4 IF NEW.status THEN
5 SET @tipe= 'DELETE';
6 ELSE
7 SET @tipe= 'UPDATE';
8 END IF;
9
10 INSERT INTO tb_artikel_log (id, perubahan) VALUES (NEW.id, @tipe);
11 END

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)

1 <?php
2
3 define('DB_HOST', 'localhost');
4 define('DB_USER', 'root');
5 define('DB_PASS', '');
6 define('DB_NAME', 'db_belajar');
7
8 function connect() {
9 $connect = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
10
11 if (mysqli_connect_errno($connect)) {
12 die("Failed to connect:" . mysqli_connect_error());
13 }
14
15 mysqli_set_charset($connect, "utf8");
16
17 return $connect;
18 }
19
20 ?>

Kemudian buat file untuk Create, Read, Update, Delete data (contoh_trigger.php) :
1 <?php
2 error_reporting(0);
3 include "db.php";
4 $connect = connect();
5 if (!empty($_POST)) {
6 if (empty($_GET['act'])) {
7 $query = "INSERT INTO tb_artikel(judul,artikel) VALUES('" . $_POST['judul'] . "','" . $_POST['artikel'] . "')";
8 mysqli_query($connect, $query);
9 } else {
10 $query = "UPDATE tb_artikel SET judul = '" . $_POST['judul'] . "', artikel = '" . $_POST['artikel'] . "' WHERE id = '" . $_GET['id'] .
11 "'";
12 mysqli_query($connect, $query);
13 }
14 } else {
15 switch ($_GET['act']) {
16 case "update" :
17 $query = "SELECT * FROM tb_artikel WHERE id = '" . $_GET['id'] . "'";
18 $result = mysqli_query($connect, $query);
19 $row = mysqli_fetch_assoc($result);
20 break;
21 case "delete" :
22 $query = "UPDATE tb_artikel SET status = '1' WHERE id = '" . $_GET['id'] . "'";
23 mysqli_query($connect, $query);
24 break;
25 }
26 }
27 ?>
28 <!DOCTYPE html>
29 <head lang="en">
30 <meta charset="utf-8">
31 <title>Contoh Trigger MySQL </title>
32 <style>
33 .data th , .data td {
34 border: 1px solid grey;
35 border-collapse: collapse;
36 padding: 5px;
37 }
38 .data tr:nth-child(odd) {
39 background-color: #f2f2f2;
40 }
41 .data tr:nth-child(even) {
42 background-color: #ffffff;
43 }
44 </style>
45 </head>
46 <body>
47 <h2>Masukkan Data</h2>
48 <form action="" method="post" name="inputdata">
49 <table border="0">
50 <tr>
51 <td>Judul</td>
52 <td><input type="text" name="judul" value="<?= $row['judul'] ?>" /></td>
53 </tr>
54 <tr>
55 <td>Artikel</td>
56 <td><textarea name="artikel"><?= $row['artikel'] ?></textarea></td>
57 </tr>
58 <tr>
59 <td></td>
60 <td><input type="submit" value="Simpan" name="simpan"></td>
61 </tr>
62 </table>
63 </form>
64 <br />
65 <h2>Daftar Artikel</h2>
66 <table class="data" cellspacing="0" cellpadding="0">
67 <tr>
68 <th>Judul</th>
69 <th>Action</th>
70 </tr>
71 <?php
72 $sql = "SELECT * FROM tb_artikel WHERE status is null";
73 if ($result = mysqli_query($connect, $sql)) {
74 while ($row = mysqli_fetch_assoc($result)) {
75 ?>
76 <tr>
77 <td><?= $row['judul'] ?></td>
78 <td>[<a href="contoh_trigger.php?act=update&id=<?= $row['id'] ?>">update</a>] [<a
79 href="contoh_trigger.php?act=delete&id=<?= $row['id'] ?>">delete</a>]</td>
80 </tr>
81 <?php
82 }
83 }
84 ?>
85 </table>
86 <br />
87 <h2>Log Artikel</h2>
88 <table class="data" cellspacing="0" cellpadding="0">
89 <tr>
90 <th>Tanggal</th>
91 <th>Judul</th>
92 <th>Action</th>
93 </tr>
94 <?php
95 $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";
96 if ($result = mysqli_query($connect, $sql)) {
97 while ($row = mysqli_fetch_assoc($result)) {
98 ?>
99 <tr>
100 <td><?= $row['waktu'] ?></td>
101 <td><?= $row['judul'] ?></td>
102 <td><?= $row['perubahan'] ?></td>
103 </tr>
104 <?php
105 }
106 }
107 ?>
108 </table>
</body>
</html>

MySQL adalah database paling populer untuk membangun website, untuk panduan
lengkapnya bisa cek di Cara Membuat Database di MySQL.

Anda mungkin juga menyukai