Cara menggunakan trigger after insert mysql

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 :

CREATE TABLE `tb_artikel` (
	`id` int(8) NOT NULL AUTO_INCREMENT,
	`judul` varchar(100),
	`artikel` text,
        `status` tinyint(1),
	PRIMARY KEY (`id`)
)

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);
    END

Trigger ketika update atau delete (dalam tutorial ini bukan delete yang sebenarnya, tetapi merubah status artikel) data :

CREATE TRIGGER `after_update_artikel`
    AFTER UPDATE ON `tb_artikel` FOR EACH ROW
    BEGIN
	IF NEW.status THEN
		SET @tipe= 'DELETE';
	ELSE
		SET @tipe= 'UPDATE';
	END IF;

    INSERT INTO tb_artikel_log (id, perubahan) VALUES (NEW.id, @tipe);
    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)

<?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 🙂

Apa itu trigger di MySQL?

Trigger dalam database adalah kode prosedural yang secara otomatis dijalankan untuk menanggapi perubahan tertentu pada table tertentu atau tampilan dalam database. Trigger dapat didefinisikan untuk menjalankan penrintah sebelum atau setelah eksekusi DML (Data Manipulation Language) seperti INSERT, UPDATE, dan DELETE.

Apa perbedaan antara before dan after pada trigger?

Before Trigger adalah jenis pemicu yang secara otomatis dieksekusi sebelum operasi tertentu terjadi di atas meja. Sebaliknya, setelah pemicu adalah jenis pemicu yang secara otomatis dieksekusi setelah operasi tertentu terjadi di atas meja.

Apa peristiwa yang menyebabkan trigger dilakukan?

trigger_event : merupakan event atau peristiwa yang menyebabkan trigger dilakukan.

Apa itu trigger pada database?

Trigger dapat didefinisikan sebagai himpunan kode (prosedural) yang dieksekusi secara otomatis sebagai respon atas suatu kejadian berkaitan dengan tabel basis data. Kejadian (event) yang dapat membangkitkan trigger umumnya berupa pernyataan INSERT, UPDATE, dan DELETE.