Selasa, 23 November 2021

Mysql~7 -TRIGGER

PENGERTIAN TRIGGER



 Dalam DBMS (Database Management System), trigger merupakan kumpulan script yang berhubungan dengan table, view ataupun skema yang dijalankan secara otomatis ketika terdapat event yang dijalankan. Event tersebut meliputi operasi yang biasa dilakukan dalam mengolah database, seperti :

  • DML (Data Manipulation Language) yang meliputi DELETE, INSERT atau UPDATE
  • DDL (Data Definition Language) yang meliputi CREATE, ALTER atau DROP
  • Operasi Database lainnya, seperti SERVERERROR, LOGON, LOGOFF, STARTUP atau SHUTDOWN)

Secara sederhana, perintah untuk membuat trigger adalah sebagai berikut :

CREATE TRIGGER nama_trigger [BEFORE|AFTER]
[INSERT/UPDATE/DELETE]
ON nama_table
FOR EACH ROW
BEGIN
// trigger body
END;

Keterangan dari bentuk perintah umum dalam membuat trigger, yaitu :

  • nama_trigger : nama trigger yang dibuat sesuai dengan karakteristik penamaan dalam MySQL
  • [BEFORE|AFTER] : menunjukkan waktu untuk mengeksekusi trigger secara otomatis, apakah sebelum atau sesudah perubahan pada row data table. Jadi pilihannya adalah AFTER atau BEFORE.
  • [INSERT | UPDATE | DELETE] : digunakan untuk menentukan event yang menyebabkan terjadinya trigger, pilIhan event tersebut terdiri dari INSER, UPDATE dan DELETE.
  • nama_table : menunjukkan table yang akan dilakukan trigger didalamnya
  • trigger_body : menunjukkan statement perintah dalam MySQL yang akan otomatis dijalankan jika event sedang aktif.

Fungsi Trigger

fungsi trigger

Biasanya dalam relasional database, trigger dapat ditemui ketika melakukan perintah eksekusi table. Hal itu menjadi lebih bermanfaat trigger menjaikan penulisan pemrograman yang sederhana dan dapat menjaga informasi agar tetap konsisten dalam database. Selain itu, terdapat beberapa fungsi trigger yang akan dijelaskan dibawah ini.

1. Integritas Data

Dengan adanya trigger, Anda dapat mempertahankan integritas table yang terdapat dalam database. Sebab, Anda dapat melakukan operasi-operasi yang berkaitan dengan pengolahan database, seperti INSERT, UPDATE dan DELETE

2. Mencegah Error

Trigger dalam MySQL dapat mencegah terjadinya error dalam pengoperasian data. Jika terjadi error dalam pendefinisian trigger, error tersebut tidak mengganggu trigger yang sedang berjalan.

3. Membuat Tugas Kerja menjadi Terjadwal

Ketika trigger telah dijalankan, maka Anda dapat menggunakan berbagai bahasa pemrograman tanpa harus bingung bagaimana cara mengaksesnya.

4. Mencegah Proses Transaksi yang Tidak Sah

Dalam praktiknya, biasa trigger digunakan untuk melakukan proses transaksi. Anda dapat menyimpan record transaksi tersebut ke table lain (history) tanpa harus takut jika data tersebut di-update atau delete. Semua perubahan yang terjadi juga dapat diacak berdasarkan waktu pembuatannya.

CONTOH KASUS :

>Membuat table produk , jika dalam gambar dibawah ini sebelum di lakukan rename dengan 
    RENAME table penjualan to produk;

MariaDB [(none)]> use penjualan;
Database changed
MariaDB [penjualan]> create table penjualan(
    -> kd_produk varchar(6) NOT NULL,
    -> nm_produk varchar(100),
    -> harga int(11));
Query OK, 0 rows affected (0.387 sec)


>Membuat table log_harga

    MariaDB [penjualan]> create table log_harga (

    -> log_id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,

    -> kd_produk varchar(8),

    -> harga_lama int(11),

    -> harga_baru int(11),

    -> waktu_perubahan datetime);

Query OK, 0 rows affected (0.168 sec)

>Input data table
    sebelum dilakukan uji coba dalam pembuatan trigger terlebih dahulu dalam melakukan input data guna dapat menampilkan hasil trigger jika dilakukan select 

MariaDB [penjualan]> insert into produk values ('ATK001','PENSIL','12000');
Query OK, 1 row affected (0.124 sec)

MariaDB [penjualan]> INSERT INTO produk values ('ATK002','PENGHAPUS','8000');
Query OK, 1 row affected (0.083 sec)

MariaDB [penjualan]> SELECT * FROM PRODUK;
---------------------------------------------
| kd_produk | nm_produk      | harga   |
---------------------------------------------
| ATK001     | PENSIL           | 12000  |
| ATK002     | PENGHAPUS |  8000   |
---------------------------------------------
2 rows in set (0.041 sec)


>Membuat Trigger
    Delimiter $$
    CREATE trigger before_produk_update
        BEFORE UPDATE ON produk
        FOR EACH ROW
    BEGIN
        INSERT into_harga
        SET kd_produk = OLD.kd_produk,
        harga_baru = NEW.harga,
        harga_lama = OLD.harga,
        waktu_perubahan = NOW();
    END $$

    
hasil contoh jika trigger dengan nama yang kita buat telah tersedia.
jika kita ingin melihat trigger yang telah kita buat dalam PHPmyAdmin berikut gambarannya :


>Uji Coba Trigger 
1. Masukkan beberapa record ke tabel produk, 
    contoh 
    INSERT INTO produk VALUES ('ATK001','PENSIL',12000); 
    INSERT INTO produk VALUES ('ATK002','PENGHAPUS',8000);
XAMPP nya :
MariaDB [penjualan]> insert into produk values ('ATK001','PENSIL','12000');
Query OK, 1 row affected (0.124 sec)

MariaDB [penjualan]> INSERT INTO produk values ('ATK002','PENGHAPUS','8000');
Query OK, 1 row affected (0.083 sec)

MariaDB [penjualan]> SELECT * FROM PRODUK;
---------------------------------------------
| kd_produk | nm_produk      | harga   |
---------------------------------------------
| ATK001     | PENSIL           | 12000  |
| ATK002     | PENGHAPUS |  8000   |
---------------------------------------------
2 rows in set (0.041 sec)


2. Update harga produk, 
    contoh 
    update produk set harga=10000 WHERE kd_produk='ATK001' 
    Membuktikan Trigger Trigger akan berhasil jika di dalam tabel tujuan trigger, yang dalam contoh ini adalah tabel log_harga secara otomatis akan terdapat record baru, cara cek? select * from log_harga;




- Pada tabel log_harga tambahkan field:
    > nm_produk_baru dengan tipe data varchar (100) 
    > nm_produk_lama dengan tipe data varchar (100) 


- Uji cobakan triger yang dibuat dengan update: 
    > update produk set nm_produk=PENGGARIS WHERE kd_produk='ATK001'

penjelasan mengapa eror, karena pada field produk tidak terdapatnya field yang bernama penggaris sedangkan dalam field log_harga hanya di sebutkan kode produk namun tidak disebutkan nama produknya.

sekian penjelasan tentang trigger kali ini. mohon maaf terdapat beberapa gambaran yang tidak serupa dikarenakan terdapat gangguan laptop yang sempet ngeblank pada akhirnya beberapa script lupa untuk di ambil tangkapan gambarnya. terima kasih wassalam.

Rabu, 03 November 2021

UTS Basis Data Semester 3

 Nama : Afni Eka Rahmawati

NIM    : 203100077

Prodi   : Sistem Informasi


Langkah awal, masukkan data berikut ke tabel detil_pesan.


detil_pesan

id_pesan  id_produk  jumlah  harga 

1 MIE001  3 jumlah x dengan harga di ID PRODUK

2 ATK001 4 jumlah x dengan harga di ID PRODUK

3 ATK002 5 jumlah x dengan harga di ID PRODUK

4 ATK002  6 jumlah x dengan harga di ID PRODUK




SOAL!


Petunjuk: setiap soal discreenshootkan syntak dan hasil querynya.


1. Lakukan INNER JOIN dari semua tabel yang bisa dilakukkan inner join! (tidak ada ketentuan minimal, semakin banyak tentu semakin baik jika benar)


  • select pesan.id_pesan,pesan.tgl_pesan,faktur.id_faktur,faktur.tgl_faktur,pelanggan.id_pelanggan,pelanggan.nm_pelanggan,
    • pelanggan.alamat,pelanggan.telepon,pelanggan.email,detail_pesan.id_produk,detail_pesan.jumlah,detail_pesan.harga-> from pesan -> inner join faktur on pesan.id_pesan=faktur.id_pesan -> inner join pelanggan on pesan.id_pelanggan=pelanggan.id_pelanggan -> inner join detail_pesan on pesan.id_pesan=detail_pesan.id_pesan;

  • select produk.id_produk,produk.nm_produk,produk.satuan,produk.harga,produk.stock,detail_pesan.id_pesan,detail_pesan.jumlah,detail_pesan.harga
    • -> from produk
    • -> inner join detail_pesan on produk.id_produk=detail_pesan.id_produk;

2. Lakukan LEFT JOIN untuk menampilkan id_pelanggan, nm_pelanggan, id_pesan, tgl_pesan



MariaDB [sistem_pemesanan]> select pelanggan.id_pelanggan,pelanggan.nm_pelanggan,pesan.id_pesan,pesan.tgl_pesan
    -> from pelanggan
    -> left join pesan on pelanggan.id_pelanggan=pesan.id_pelanggan;
+--------------+--------------+----------+------------+
| id_pelanggan | nm_pelanggan | id_pesan | tgl_pesan  |
+--------------+--------------+----------+------------+
| UAA00        | Abiyasa      |        1 | 2020-10-28 |
| UAA02        | Baladewa     |        2 | 2020-10-29 |
| UAA03        | Cakil        |        3 | 2020-10-30 |
| UAA04        | Dasamuka     |        4 | 2020-10-31 |
| UAA05        | Ekalawya     |        5 | 2020-10-31 |
+--------------+--------------+----------+------------+
5 rows in set (0.076 sec)


3. Tampilkan semua field dari penggabungan 3 tabel yang dimungkinkan karena adanya relasi tabel! (tidak ada ketentuan minimal, semakin banyak tentu semakin baik jika benar)

MariaDB [sistem_pemesanan]> select pelanggan.id_pelanggan,pelanggan.nm_pelanggan,pesan.id_pesan,pesan.tgl_pesan

    -> from pelanggan

    -> left join pesan on pelanggan.id_pelanggan=pesan.id_pelanggan;

+--------------+--------------+----------+------------+

| id_pelanggan | nm_pelanggan | id_pesan | tgl_pesan  |

+--------------+--------------+----------+------------+

| UAA00        | Abiyasa      |        1 | 2020-10-28 |

| UAA02        | Baladewa     |        2 | 2020-10-29 |

| UAA03        | Cakil        |        3 | 2020-10-30 |

| UAA04        | Dasamuka     |        4 | 2020-10-31 |

| UAA05        | Ekalawya     |        5 | 2020-10-31 |

+--------------+--------------+----------+------------+

5 rows in set (0.076 sec)


MariaDB [sistem_pemesanan]> select pelanggan.id_pelanggan,pelanggan.nm_pelanggan,pelanggan.alamat,pelanggan.telepon,pelanggan.email,pesan.id_pesan,pesan.tgl_pesan,detil_pesan.id_produk,detil_pesan.jumlah,detil_pesan.harga

    -> from pelanggan,pesan,detil_pesan

    -> where pelanggan.id_pelanggan=pesan.id_pelanggan and pesan.id_pesan=detil_pesan.id_pesan;

+--------------+--------------+-----------+-------------+------------------------+----------+------------+-----------+--------+-------+

| id_pelanggan | nm_pelanggan | alamat    | telepon     | email                  | id_pesan | tgl_pesan  | id_produk | jumlah | harga |

+--------------+--------------+-----------+-------------+------------------------+----------+------------+-----------+--------+-------+

| UAA00        | Abiyasa      | Ngastino  | 08111222333 | abiyasa@almaata.ac.id  |        1 | 2020-10-28 | MIE00     |      3 |  6000 |

| UAA02        | Baladewa     | Madura    | 08222333444 | baladewa@almaata.ac.id |        2 | 2020-10-29 | ATK01     |      4 | 20000 |

| UAA03        | Cakil        | Goa       | 08333444555 | cakil@almaata.ac.id    |        3 | 2020-10-30 | ATK01     |      5 | 37500 |

| UAA04        | Dasamuka     | Ngalengka | 08444555666 | Dasamuka@almaata.ac.id |        4 | 2020-10-31 | ATK02     |      6 | 45000 |

+--------------+--------------+-----------+-------------+------------------------+----------+------------+-----------+--------+-------+

4 rows in set (0.109 sec)




4. Salinlah syntak berikut "SELECT pesan.id_pesan, pesan.tgl_pesan, SUM(detil_pesan.jumlah) as jumlah FROM pesan, detil_pesan WHERE pesan.id_pesan=detil_pesan.id_pesan GROUP BY id_pesan;" hasilnya apa dan jelaskan!

MariaDB [sistem_pemesanan]> select pesan.id_pesan,pesan.tgl_pesan,SUM(detil_pesan.jumlah) as jumlah from pesan,detil_pesan where pesan.id_pesan=detil_pesan.id_pesan group by id_pesan;

+----------+------------+--------+

| id_pesan | tgl_pesan  | jumlah |

+----------+------------+--------+

|        1 | 2020-10-28 |      3 |

|        2 | 2020-10-29 |      4 |

|        3 | 2020-10-30 |      5 |

|        4 | 2020-10-31 |      6 |

+----------+------------+--------+

4 rows in set (0.151 sec)



5. Salinlah syntak berikut "SELECT id_pelanggan, nm_pelanggan FROM pelanggan WHERE id_pelanggan IN (SELECT id_pelanggan FROM pesan);" hasilnya apa dan jelaskan perhatikan dengan melihat tabel pelanggan.

MariaDB [sistem_pemesanan]> desc pelanggan;

+--------------+-------------+------+-----+---------+-------+

| Field        | Type        | Null | Key | Default | Extra |

+--------------+-------------+------+-----+---------+-------+

| id_pelanggan | varchar(5)  | NO   | PRI | NULL    |       |

| nm_pelanggan | varchar(40) | NO   |     | NULL    |       |

| alamat       | text        | NO   |     | NULL    |       |

| telepon      | varchar(20) | NO   |     | NULL    |       |

| email        | varchar(50) | NO   |     | NULL    |       |

+--------------+-------------+------+-----+---------+-------+

5 rows in set (0.225 sec)


MariaDB [sistem_pemesanan]> select id_pelanggan,nm_pelanggan from pelanggan where id_pelanggan in (select id_pelanggan from pesan);

+--------------+--------------+

| id_pelanggan | nm_pelanggan |

+--------------+--------------+

| UAA00        | Abiyasa      |

| UAA02        | Baladewa     |

| UAA03        | Cakil        |

| UAA04        | Dasamuka     |

| UAA05        | Ekalawya     |

+--------------+--------------+

5 rows in set (0.151 sec)



sekian jawaban uts saya, saya ucapkan terimakasih


Mysql~9 - Views

Apa Itu View dalam MySQL  View  adalah perintah query yang disimpan pada database dengan suatu nama tertentu, sehingga bisa digunakan setiap...