Praktikum Basis Data 8

 

Pertemuan 8


        Halo teman2 di postingan kali ini kita lanjut untuk praktikum pertemuan 8. Pada praktikum ke 8 saya masih lanjut dengan materi tentang DML atau Data Manipulation Language. Buat temen2 yang belum tahu apa itu DML, Jadi DML merupakan metode query dasar yang dapat digunakan apabila DDL telah terjadi sehingga fungsi dari query DML ini untuk melakukan pemanipulasian database yang telah dibuat. Untuk temen2 yang lupa apa itu DDL dapat membaca postingan saya pada Pertemuan sebelumnya yaitu pada pertemuan (https://sonefanwar.blogspot.com/2020/10/praktikum-basis-data-3.html). Berbeda dari pertemuan sebelumnya kali ini kita akan membahas tentang DML-TRIGGER.


A. Materi


Berikut beberapa materi penting yang bisa temen2 ingat untuk praktikum nanti :

1. TRIGGER

• Trigger digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis sebelum atau sesudah terjadi proses INSERT, UPDATE atau DELETE dari suatu tabel.

 • Trigger sering digunakan, antara lain untuk:

    - Melakukan update data otomatis jika terjadi perubahan. Contohnya adalah dalam sistem penjualan, jika dientri barang baru maka stock akan bertambah secara otomatis.
    - Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi perubahan, secara otomatis akan menyimpan ke tabel log.
    - Trigger dapat digunakan untuk melakukan validasi dan verifikasi data sebelum data tersebut disimpan.


2. MEMBUAT TRIGGER BARU

• Berikut ini bentuk umum perintah untuk membuat triggers:

CREATE TRIGGER name
[BEFORE|AFTER] [INSERT|UPDATE|DELETE]
ON
 tablename
FOR EACH ROW
 statement
dimana
BEFORE | AFTER
 digunakan untuk menentukan kapan proses secara otomatis akan
dieksekusi, sebelum atau sesudah proses.

• Contoh :

DELIMITER $$
CREATE TRIGGER update_alamat_mahasiswa 
    BEFORE UPDATE 
    ON mahasiswa
    FOR EACH ROW 
BEGIN
    INSERT INTO log_mahasiswa
    set nim = OLD.nim,
    alamat_lama=old.alamat,
    alamat_baru=new.alamat,
    waktu = NOW(); 
END$$
DELIMITER ;




B. Praktikum



1. SOAL

Pada praktikum kali ini saya diberikan tugas yang rinciannya dapat temen2 lihat di bawah ini : 
a. Membuat fitur yang mencatat log perubahan harga barang pada sebuah database penjualan.
b. Buatlah tabel produk di bawah :



c. Buatlah tabel log harga :

d. Membuat Trigger :

e. Masukkan beberapa record ke tabel produk, contoh : 
INSERT INTO produk VALUES ('ATK001','PENSIL',12000);
INSERT INTO produk VALUES ('ATK002','PENGHAPUS',8000);

f. Update harga produk, contoh : 
update produk set harga=10000 WHERE kd_produk='ATK001'

g. Membuktikan Trigger :
select * from log_harga;

h. Pada tabel log_harga tambahkan field :
nm_produk_baru dengan tipe data varchar (100)
nm_produk_lama dengan tipe data varchar (100)

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


2. IMPLEMENTASI


        Seperti biasa kita buka MySQL yang tutorial download dan installnya dapat temen2 baca di Praktikum Pertemuan 1 (https://sonefanwar.blogspot.com/2020/09/praktikum-basis-data-1.html). Sebelum kita mulai mengerjakan tugas di atas kita perlu untuk mengetikkan perintah yaitu 
mysql -u root " dan tekan Enter.


a. Membuat fitur yang mencatat log perubahan harga barang pada sebuah database penjualan.

• Syntax yang saya gunakan adalah sebagai berikut :

1. " CREATE DATABASE Penjualan; "
2. " USE Penjualan; "
3. " Show Databases; "

• Hasilnya akan tampak seperti ini :



b. Buatlah tabel produk di bawah :


• Syntax yang saya gunakan :

CREATE TABLE Produk ( Kd_Produk varchar (6) collate latin1_general_ci NOT NULL, NM_Produk varchar (100) collate latin1_general_ci, Harga int (11), PRIMARY KEY (Kd_Produk) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

• Hasilnya adalah sebagai berikut :


c. Buatlah tabel log harga :


• Syntax yang saya gunakan :

CREATE TABLE Log_Harga ( Log_Id int (11) collate latin1_general_ci NOT NULL AUTO_INCREMENT, Kd_Produk varchar (8) collate latin1_general_ci, Harga_Lama int (11), Harga_Baru int (11), Waktu_Perubahan datetime, PRIMARY KEY (Log_Id), KEY FK_Produk (Kd_Produk), CONSTRAINT FK_Produk FOREIGN KEY (Kd_Produk) REFERENCES Produk (Kd_Produk) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

• Hasilnya adalah sebagai berikut :




d. Membuat Trigger :



• Syntax yang saya gunakan sama seperti gambar di atas.

• Hasilnya adalah sebagai berikut :




e. Masukkan beberapa record ke tabel produk, contoh : 

INSERT INTO produk VALUES ('ATK001','PENSIL',12000);
INSERT INTO produk VALUES ('ATK002','PENGHAPUS',8000);

• Syntax yang saya gunakan sama seperti pada soal tersebut.

• Hasilnya adalah sebagai berikut :




f. Update harga produk, contoh : 

update produk set harga=10000 WHERE kd_produk='ATK001'

• Syntax yang saya gunakan seperti pada soal tersebut.

• Hasilnya adalah sebagai berikut :




g. Membuktikan Trigger :

select * from log_harga;

• Syntax yang saya gunakan sama seperti soal tersebut.

• Hasilnya adalah sebagai berikut :




h. Pada tabel log_harga tambahkan field :

nm_produk_baru dengan tipe data varchar (100)
nm_produk_lama dengan tipe data varchar (100)

• Sebelum menjalankan syntax di bawah kita perlu menghapus tabel log harga dulu, dimana pada tabel tersebut tidak terdapat field nm_produk_lama dan nm_produk_baru sehingga perlu kita gantikan dengan susunan syntax tabel baru yang memuat kedua field tersebut.

• Syntax yang saya gunakan :

CREATE TABLE Log_Harga ( Log_Id int (11) collate latin1_general_ci NOT NULL AUTO_INCREMENT, Kd_Produk varchar (8) collate latin1_general_ci, NM_Produk_Lama varchar (100) collate latin1_general_ci , NM_Produk_Baru varchar (100) collate latin1_general_ci , Harga_Lama int (11), Harga_Baru int (11), Waktu_Perubahan datetime, PRIMARY KEY (Log_Id), KEY FK_Produk (Kd_Produk), CONSTRAINT FK_Produk FOREIGN KEY (Kd_Produk) REFERENCES Produk (Kd_Produk) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

• Hasilnya adalah sebagai berikut :


• Berikutnya saya menghapus TRIGGER lama dengan DROP TRIGGER dan membuat ulang TRIGGER yang baru, hasilnya adalah sebagai berikut :

 



i. Uji cobakan Trigger yang dibuat dengan update :

update produk set nm_produk=PENGGARIS WHERE kd_produk='ATK001'

• Syntax yang saya gunakan hampir sama seperti soal tersebut.

• Hasil syntax di atas :


• Hasil log dari syntax di atas dapat temen2 lihat pada Log Id nomer 6 dimana terdapat perubahan dari NM Produk Lama yaitu Pensil ke NM Produk Baru yaitu Penggaris :





*Catatan (Mohon koreksi apabila salah) 
Beberapa kesimpulan yang saya dapat ketika mengerjakan tugas ini : 

1. Record dan tabel pada Log Harga dapat di hapus namun Log Id akan tetap berlanjut pada nomer terakhir dilakukannya perubahan.



    Baik mungkin cukup sekian praktikum basis data pada pertemuan ke delapan kali ini. Terima kasih kepada teman2 yang telah meluangkan waktu untuk membaca postingan ini sampai selesai. Sampai jumpa pada pertemuan berikutnya.





0 Response to "Praktikum Basis Data 8"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel