LAPORAN MODUL VIII
PRAKTIKUM BASIS DATA Disusun untuk Memenuhi Matakuliah Praktikum Basis Data Dibimbing oleh Triyanna Widyaningtyas, S.T., M.T.
Oleh: Dwitha Fajri Ramadhani
160533611410
Ika Damayanti
160533611505
S1 PTI’16 OFF B
UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA April 2017
1. Judul TRIGGER 2. Dasar Teori 2.1 Trigger 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. Berdasarkan ruang lingkupnya, trigger diklasifikasikan menjadi dua jenis : row trigger dan statement trigger. Trigger baris (row) mendefinisikan aksi untuk setiap baris tabel : trigger pernyataan hanya berlaku untuk setiap pernyataan
INSERT, UPDATE, dan
DELETE. Dari sisi perilaku (behavior) eksekusi, trigger dapat dibedakan menjadi beberapa jenis; namun umumnya ada dua jenis: trigger BEFORE dan AFTER. Sesuai penamaannya, jenisjenis ini merepresentasikan waktu eksekusi trigger-misalnya sebelum ataukah sesudah pernyataan-pernyataan yang berkorespondensi. Adakalanya trigger dipandang sebagai bentuk spesifik dari stored procedure (terkait pendefinisian body). Bagaimanapun, trigger akan dipanggil (secara otomatis) ketika event terjadi, sedangkan stored procedure harus dipanggil secara eksplisit. CREATE [DEFINER = {user | CURRENT_USER } ] TRIGGER trigger_name trigger_time trigger_even ON tbl_name FOR EACH ROW trigger_stmt
MySQL tidak mengizinkan multiple trigger dengan waktu aksi dan event sama per tabel. Misalkan di tabel A sudah didefinisikan trigger AFTER INSERT, maka kita tidak boleh mendefinisikan trigger AFTER INSERT lagi; namun AFTER EDIT, AFTER DELETE, atau BEFORE (INSERT, EDIT, dan DELETE) bisa diterima.
2.2 Trigger MySQL MySQL mendukung fitur trigger—termasuk juga stored procedure dan view— sejak versi 5.0.2. Sebagaimana objek-objek lainnya, trigger diciptakan menggunakan pernyataan CREATE. Sintaks pendefinisian trigger diperlihatkan sebagai berikut : CREATE [DEFINER = {user | CURRENT_USER } ]
TRIGGER trigger_name trigger_time trigger_even ON tbl_name FOR EACH ROW trigger_stmt
MySQL tidak mengizinkan multiple trigger dengan waktu aksi dan event sama per tabel. Misalkan di tabel A sudah didefinisikan trigger AFTER INSERT, maka kita tidak boleh mendefinisikan trigger AFTER INSERT lagi; namun AFTER EDIT, AFTER DELETE, atau BEFORE (INSERT, EDIT, dan DELETE) bisa diterima. •
Application trigger : diaktifkan pada saat terjadi event yang berhubungan dengan sebuah aplikasi
•
Database trigger : diaktifkan pada saat terjadi event yang berhubungan dengan data (seperti operasi DML) atau event yang berhubungan dengan sistem (semisal logon atau shutdown) yang terjadi pada sebuah skema atau database.
•
Trigger perlu dibuat pada saat : ✓ Membentuk sebuah aksi tertentu terhadap suatu event ✓ Memusatkan operasi global
•
Trigger tidak perlu dibuat, jika : ✓ Fungsionalitas yang diperlukan suatu ada pada Oracle server ✓ Duplikat atau sama dengan fungsi trigger yang lain.
2.3 Sintaks Trigger Sintak penulisan dari database trigger,berisi komponen berikut : 1. Trigger timing : a. Untuk tabel : BEFORE, AFTER b. Untuk view : INSTEAD OF Trigger timing adalah waktu kapan trigger diaktifkan. Ada tiga macam trigger timing, yaitu : a. BEFORE : trigger dijalankan sebelum DML event pada tabel b. AFTER : trigger dijalankan setelah DML event pada tabel c. INSTEAD OF : trigger dijalankan pada sebuah view. 2. Trigger event : INSERT, UPDATE atau DELETE 3. Nama tabel : yaitu nama tabel atau view yang berhubungan dengan trigger 4. Tipe trigger : Baris atau Pernyataan (statement) 5. Klausa WHEN : untuk kondisi pembatasan 6. Trigger body : bagian prosedur yang dituliskan pada trigger
Trigger body mendefinisikan tindakan yang perlu dikerjakan pada saat terjadinya event yang mengakibatkan sebuah trigger menjadi aktif.
Trigger event ada 3 kemungkinan : INSERT, UPDATE atau DELETE. Pada saat trigger event UPDATE, kita dapat memasukkan daftar kolom untuk mengidentifikasi kolom mana yang berubah untuk mengaktifkan sebuah trigger (contoh : UPDATE OF salary ... ). Jika tidak ditentukan, maka perubahannya akan berlaku untuk semua kolom pada semua baris.
2.4 Tipe Trigger Tipe trigger ada 2 macam, yaitu : 1. Statement : trigger dijalankan sekali saja pada saat terjadi sebuah event. Statement trigger juga dijalankan sekali, meskipun tidak ada satupun baris yang dipengaruhi oleh event yang terjadi. 2. Row : trigger dijalankan pada setiap baris yang dipengaruhi oleh terjadinya sebuah event. Row trigger tidak dijalankan jika event dari trigger tidak berpengaruh pada satu baris pun.
2.5 Kegunaan Trigger a. Melakukan update data otomatis jika terjadi perubahan. Contohnya adalah dalam sistem penjualan, jika dientri barang baru maka stock akan bertambah secara otomatis. b. Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi perubahan, secara otomatis akan menyimpan ke tabel log. c. Trigger dapat digunakan untuk melakukan validasi dan verifikasi data sebelum data tersebut disimpan.
3. Latihan Sebelum melakukan tugas latihan, praktikan membuka XAMPP CONTROL PANEL dan memilih Start pada Module MySQL dan Apache kemudian klik Admin atau mengakses localhost/phpmyadmin pada browser.
Maka akan tampil seperti pada gambar dibawah ini :
Sebelum mengerjakan latihan praktikkan membuat database terlebih dahulu dengan klik SQL pada awal tampilan phpMyAdmin, yang kemudian menuliskan perintah CREATE’nama_database’;. Kali ini praktikkan membuat database dengan nama modul8_005; untuk mengeksekusi perintah klik GO.
Database telah berhasil dibuat.
Setelah membuat database, praktikkan menambahkan tabel barang, dengan klik SQL pada awal tampilan phpMyAdmin, kemudian mengetikkan pernyataan-pernyataan yang dibutuhkan pada praktikum kali ini. Struktur untuk pernyataan pembuatan tabel adalah sebagai berikut :
CREATE TABLE ‘nama_tabel’ ( ‘nama_field1’ TIPEDATA(length), ‘nama_field2’ TIPEDATA(length), PRIMARY KEY(nama_field) ); Dalam praktikum kali ini praktikkan membuat tabel yang bernama “barang”, dengan memiliki 3 field yaitu ID_BRG yang bertipe data VARCHAR yang memiliki length 10. Field kedua yaitu NAMA_BRG yang bertipe data VARCHAR yang memiliki length 30, yang ketiga yaitu STOK yang bertipe data INT dan tidak memiliki length. Praktikkan memilih tipe data INT dan VARCHAR karena tipe data tersebut lebih general, sebenarnya penggunaan tipe data NUMBER dan TEXT juga diterima, namun kurang standar. Field ID_BRG dipilih sebagai primary key, karena ID_BRG bersifat unik atau tidak ada sama antara data satu dengan data yang lainnya. Kemudian mengeksekusi pernyataan penciptaan tabel dengan klik Go.
Tabel telah berhasil ditambhakan dalam database.
Untuk mengecek struktur dari tabel barang dengan klik barang pada modul8_005 kemudan pilih Structure.
Setelah membuat tabel dengan nama “barang”, praktikkan akan menambahkan data pada tabel tersebut melalui pernyataan SQL. Struktur untuk pernyataan menambahkan data pada tabel adalah sebagai berikut : INSERT INTO ‘nama_tabel’ (‘nama_field1’, ‘nama_field2’,........,’nama_field_terakhir’) VALUES (‘data_field1, ‘data_field2’.....,’data_field_terakhir’);
Praktikkkan langsung menginputkan 3 data sekaligus tanpa harus menginputkan SQL satu persatu.
Data berhasil diinputkan dalam tabel tb_penjualan barang.
Untuk melihat tabel hasil pada data yang telah berhasil diinputkan dapat menggunakan SQL, dengan struktur SELECT * FROM ‘nama_tabel’;
Maka akan menampilkan hasil data-data yang telah diinputkan.
Pada praktikum kali ini dibutuhkan 2 tabel, maka pratikkan menambahkan satu tabel lagi yaitu tabel pembelian dengan klik SQL pada awal tampilan phpMyAdmin, kemudian mengetikkan pernyataan-pernyataan yang dibutuhkan pada praktikum kali ini. Struktur untuk pernyataan pembuatan tabel adalah sebagai berikut : CREATE TABLE ‘nama_tabel’ ( ‘nama_field1’ TIPEDATA(length), ‘nama_field2’ TIPEDATA(length), PRIMARY KEY(nama_field) ); Dalam praktikum kali ini praktikkan membuat tabel yang bernama “pembelian”, dengan memiliki 3 field yaitu ID_PEM yang bertipe data VARCHAR yang memiliki length 10. Field kedua yaitu ID_BRG yang bertipe data VARCHAR yang memiliki length 10, yang ketiga yaitu JUML_BELI yang bertipe data INT dan tidak memiliki length. Praktikkan memilih tipe data INT dan VARCHAR karena tipe data tersebut lebih general, sebenarnya penggunaan tipe data NUMBER dan TEXT juga diterima, namun kurang standar. Kemudian mengeksekusi pernyataan penciptaan tabel dengan klik Go.
Tabel telah berhasil ditambhakan dalam database.
Untuk mengecek struktur dari tabel barang dengan klik barang pada modul8_005 kemudan pilih Structure.
Setelah membuat tabel dengan nama “pembelian”, praktikkan akan menambahkan data pada tabel tersebut melalui pernyataan SQL. Struktur untuk pernyataan menambahkan data pada tabel adalah sebagai berikut : INSERT INTO ‘nama_tabel’ (‘nama_field1’, ‘nama_field2’,........,’nama_field_terakhir’) VALUES (‘data_field1, ‘data_field2’.....,’data_field_terakhir’);
Data berhasil diinputkan dalam tabel barang.
Untuk melihat tabel hasil pada data yang telah berhasil diinputkan dapat menggunakan SQL, dengan struktur SELECT * FROM ‘nama_tabel’;
Maka akan menampilkan hasil data-data yang telah diinputkan.
3.1 Menggunakan Trigger 3.1.1
Masuk ke menu trigger
3.1.2
Kemudian add trigger dan isikan sesuai prosedure
Trigger digunakan untuk memanggil satu atau beberapa perintah yang otomatis sebelum atau sesudah terjadi proses. Pada praktikum diatas trigger diberi nama inkremenStok2. Tabel yang digunakan adalah tabel barang. BEFORE pada trigger digunakan untuk menentukan proses secara otomatis akan dieksekusi pada saat sebelum atau sesudah proses. INSERT digunakan untuk menentukan event pada trigger. Perintah dalam trigger diatas yaitu (SET NEW.stok=NEW.stok +1) merupakan perintah untuk menambahkan atau di inkremen pada data yang ada ditabel barang dan akan dieksekusi saat sebelum proses. Kemudian Klik Go.
Trigger berhasil dibuat
3.1.3
Insert
Setelah trigger berhasil dibuat, praktikkan menulis syntax pada SQL untuk menjalankan proses trigger, jika dalam pembuatan trigger sebelumya event yang digunakan adalah INSERT maka pada syntax kali ini juga menggunakan INSERT. Perintah syntax kali ini digunakan untuk menambah data pada tabel barang. Setelah selesai Klik Go.
Satu data telah berhasil diinputkan pada tabel barang.
3.1.4
Hasil data yang telah diinputkan.
Terlihat bahwa trigger sudah bekerja seperti yang diharapkan, di mana setiap penambahan baru akan menginkremen nilai stok. Untuk mendapatkan informasi mengenai daftar trigger yang telah terdefinisi, gunakan perintah SHOW TRIGGERS atau bisa langsung ke menu trigger. 3.1.5
Drop
Untuk menghapus trigger yang telah dibuat bisa menggunakan perintah DROP trigger atau langsung ke menu trigger dan klik DROP. Untuk mempersingkat waktu pada prakrikum kali ini praktikkan memilih untuk langsung ke menu trigger klik DROP pada trigger yang dipilih kemudian klik Ok.
Trigger berhasil dihapus.
3.2 Keyword OLD dan NEW Untuk merujuk ke kolom-kolom tabel yang diasosiasikan dengan trigger, kita menggunakan keyword OLD dan NEW. Keyword OLD mengacu pada nilai lama, sedangkan NEW merepresentasikan nilai baru. Di trigger INSERT, kita hanya dapat menggunakan keyword NEW karena tidak ada data lama. Pada prraktikum kali ini praktikkan membuat trigger dengan cara yang sama pada sebelumnya, trigger kali ini diberi nama updateStok yang menggunakan tabel pembelian serta event INSERT dan akan di eksekusi sesudah proses. Kemudian klik Go.
Trigger berhasil dibuat.
3.2.1
Cek data awal pada tabel barang
Cek data pada tabel barang dengan cara menggunakan SQL, dengan struktur SELECT * FROM ‘nama_tabel’;
Maka akan menampilkan data yang ada pada tabel barang.
3.2.2
Insert
Kemudian praktikkan akan menambahkan data pada tabel pembelian dengan menuliskan syntax pada SQL untuk menjalankan proses trigger, jika dalam pembuatan trigger sebelumya event yang digunakan adalah INSERT maka pada syntax kali ini juga menggunakan INSERT. Perintah syntax kali ini digunakan untuk menambah data pada tabel barang. Setelah selesai Klik Go.
Data berhasil ditambahkan pada tabel pembelian.
3.2.3
Cek Data Setelah di Insert
Cek data pada tabel pembelian dengan cara menggunakan SQL, dengan struktur SELECT * FROM ‘nama_tabel’.
Dan akan menampilkan data-data yang ada pada tabel tersebut, prantikkan kali ini menambahkan data pembelian dengan ID_BRG = A10 sebanyak 10.
Setelah data ditambahkan pada tabel pembelian, maka dilakukan pengecekan kembali pada tabel barang karena akan ada penambahan STOK pada ID_BRG=A10 sebanyak 10 dan akan otomatis STOK akan menjadi 20. Pengecekan data pada tabel pembelian dengan cara menggunakan SQL, dengan struktur SELECT * FROM ‘nama_tabel’.
Dan akan menampilkan data-data yang ada pada tabel tersebut.
3.2.4
Old
Untuk kasus trigger DELETE, keyword yang bisa digunakan hanya OLD. Misalkan kita ingin mendefinisikan trigger untuk menghapus semua data pembelian manakala data barang yang sesuai—diindikasikan melalui primary key dan foreign key—dihapus. Pada praktikum kali ini praktikkan membuat trigger dengan cara yang sama pada sebelumnya, trigger kali ini diberi nama deleteChild yang menggunakan tabel barang serta event DELETE dan akan di eksekusi sesudah proses. Kemudian klik Go.
Trigger telah berhasil dibuat.
3.2.5
Delete
Setelah trigger dibuat maka masuk ke SQL dan mengetikkan syntax untuk menghapus data pada tabel barang yang mempunyai kode A10.
Data telah berhasil dihapus pada tabel barang.
3.2.6
Cek Data Setelah di Delete
Karena telah menggunakan trigger untuk menghapus isi maka isi pada tabel barang dan pembelian akan berkesinambungan. Untuk mengecek data pada tabel pembelian dengan cara menggunakan SQL, dengan struktur SELECT * FROM ‘nama_tabel’
Perintah tersebut akan menampilkan data – data pada tabel pembelian. Isi tabel pembelian adalah dua data yang mempunyai ID_BRG A10 semua maka hasil eksekusi tersebut menghasilkan tidak ada data pada tabel pembelian dikarenakan pada tabel barang yang mempunyai kode A10 telah dihapus.
Pada tabel barang yang mempunyai kode A10 juga akan terhapus.
3.2.7
Update
Khusus untuk operasi UPDATE, kita bisa memanfaatkan keyword NEW maupun OLD. Pada praktikum kali ini praktikkan membuat trigger dengan cara yang sama pada sebelumnya, trigger kali ini diberi nama updateStokEdit yang menggunakan tabel pembelian serta event UPDATE dan akan di eksekusi sesudah proses. Kemudian klik Go.
Trigger update telah berhasil dibuat.
Sebelum masuk ke editor SQL untuk menghapus data yang ada di tabel pembelian praktikkan menginputkan terlebih dahulu data pada tabel pembelian karena sebelumya data pada tabel pembelian telah dihapus semua. menambahkan data pada tabel tersebut melalui pernyataan SQL. Struktur untuk pernyataan menambahkan data pada tabel adalah sebagai berikut : INSERT INTO ‘nama_tabel’ (‘nama_field1’, ‘nama_field2’,........,’nama_field_terakhir’) VALUES (‘data_field1, ‘data_field2’.....,’data_field_terakhir’);
Setelah data ditambahkan pada tabel pembelian, pengecekan data pada tabel pembelian dengan cara menggunakan SQL, dengan struktur SELECT * FROM ‘nama_tabel’.
dan akan menampilkan data-data yang ada pada tabel tersebut.
Setelah data diinputkan dan trigger dibuat maka masuk ke SQL dan mengetikkan syntax untuk mengupdate data pada tabel barang yang mempunyai kode ID_PEM=3 dimana JML_BELI menjadi 20. 3.2.8
Update Pembelian
Data telah berhasil di update.
Maka jumlah pembelian atau JML_BELI menjadi 20.
3.2.9
Cek Data Setelah di Update
Karena pada update ini menggunakan trigger maka pada tabel barang yang mempunyai kodoe A11 akan bertambah stoknya yang sebelumnya 15 menjadi 35. Pengecekan data pada tabel tersebut menggunakan SQL, dengan struktur SELECT * FROM ‘nama_tabel’.
Dan akan menampilkan data-data yang ada pada tabel tersebut.
3.3 Trigger Kompleks Keberadaan trigger secara nyata mampu mengatasi berbagai persoalan pelik, misalnya berkaitan dengan integritas atau audit data. Ini tentu sangat masuk akal, karena trigger juga bisa mengandung pernyataan- pernyataan yang kompleks termasuk pencabangan, pengulangan, fungsi-fungsi agregat, bahkan kode pemanggilan prosedur. Sebagai ilustrasi sederhana, kita bisa mendefinisikan trigger untuk memeriksa operasi penambahan data barang. Skenarionya, jika data sudah ada, berikan status eksistensi barang; sebaliknya, data bisa langsung dimasukkan.
Trigger telah berhasil dibuat.
Trigger diatas bernama auditBarang dengan trigger time BEFORE dan trigger event INSERT yang menghubungkan dengan tabel barang. Setelah itu kondisi IF NOT EXISTS seleksi ID_BRG dari tabel barang dimana ID_BRG adalah NEW.ID_BRG. Lalu set NEW.NAMA_BRG sama dengan NEW.NAMA_BRG, NEW.STOK sama dengan NEW.STOK apabila kondisi tidak memenuhi syarat maka set @STATUS menggabungkan antara ‘ID’ NEW.ID_BRG, ‘SUDAH ADA’.
4. Tugas Praktikum 4.1 Modifikasi trigger INSERT pembelian untuk menambahkan fitur bonus di dalamnya. Aturannya adalah jika pembelian > 50 dan < 100, maka bonus = 5; jika pembelian > 100 dan < 150, maka bonus = 10; jika pembelian > 150, maka bonus = 20. Ingat, aturan penyesuaian stok barang masih berlaku, setiap ada pembelian maka stok akan berkurang. Hal pertama yang dilakukan adalah pengecekan data pada tabel barang dengan pernyataan
Dan akan menampilkan data pada tabel barang
Karena tidak sesuai dengan ketentuan yang ada pada tugas praktikum maka praktikkan menambahkan data pada tabel barang, dan mengeksekusinya.
Sehingga tabel barang setelah ditambahkan data adalah sebagai berikut
Karena data dengan kode A11, A12, A13 STOK nya tidak memenuhi ketentuan, maka praktikkan mengupdate data tersebut, dengan eksekusi pernyataan seperti berikut :
Untuk melihat data dari tabel barang dengan mengeksekusi pernyataan
Sehingga tabel barang memiliki data-data sebagai berikut
Setelah mengedit tabel barang, kemudian praktikkan mengecek data pada tabel pembelian. Dengan eksekusi pernyataan sebagai berikut
Maka akan menampilkan data pada tabel pembelian
Karena dalam tugas praktikum diberi perintah untuk kode A10 dengan JML_BELI 60 maka untuk jaga-jaga praktikkan mengahapus semua data yang ada pada tabel pembelian.
Dengan eksekusi perintah seleksi tabel pembelian
Maka menghasilkan tabel pembelian sebagai berikut
Langkah selanjutnya adalah membuat trigger dengan nama praktikum, yang dieksekusi adalah tabel pembelian, trigger time di set BEFORE kemudian trigger event dipilih INSERT, yang digunakan untuk mengubah data pada tabel pembelian. Menggunakan pernyataan IF dengan ketentuan apabila JML_BELI lebih dari 50 dan kurang dari 100, maka JML_BELI ditambahkan 5, karena sesuai dengan perintah bahwa pembelian diatas 50 dan kurang dari 100 mendapatakan bonus 5. Pernyataan ELSE IF dengan ketentuan apabila JML_BELI lebih dari 100 dan kurang dari 150, maka JML_BELI ditambahkan 10, karena sesuai dengan perintah bahwa pembelian diatas 100 dan kurang dari 150 mendapatakan bonus 10. Pernyataan ELSE IF dengan ketentuan apabila JML_BELI lebih dari 150, maka JML_BELI ditambahkan 20, karena sesuai dengan perintah bahwa pembelian diatas 150 mendapatakan bonus 20. Kemudan eksekusi pembuatan trigger praktikum dengan klik Go atau Kirim.
Setelah membuat trigger praktikum untuk penambahan atau bonus pada tabel pembelian, selanjutnya adalah pembuatan trigger untuk perintah aturan penyesuaian stok barang. Praktikkan memuat trigger kedua dengan nama updateStokPemb dimana eksekusi tabel pembelian, dengan trigger time AFTER, dan trigger event INSERT. Didalam trigger tersebut terdapat perintah UPDATE pada tabel barang dimana STOK = STOK dikurangi dari JML_BELI pada tabel pembelan. Menggunakan klausa WHERE untuk seleksi bahwa ID_BRG
sama
dengan
new.ID_BRG.
Kemudian
ekskusi
pembuatan
trigger
updateStokPemb dengan klik Go atau Kirim.
Setelah berhasil membuat kedua trigger, kemudian praktikum menambahkan data pada tabel pembelian seperti pernyataan dibawah ini :
Setelah itu seleksi tabel pembelian untuk menampilkan data pada tabel pembelian
Sehingga data pada tabel pembelian akan tampil.
Pada tabel tersebut menampilkan bahwa JML_BELI dari ID_PEM 1 dan ID_BRG A10 adalah 65, padahal praktikkan menambahkan data dengan JML_BELI 60, hal itu terjadi
karena adanya trigger praktikum, dimana apabila JML_BELI lebih dari 50 maka akan mendapatkan bonus 5, sehingga JML_BELI yang awalnya 60 menjadi 65. Setelah eksekusi data pada tabel pembelian, praktikkan eksekusi data pada tabel barang dengan mengeksekusi pernyataan sebagai berikut
Dan akan menampilkan data pada tabel barang.
Terlihat bahwa STOK dari ID_BRG A10 berubah. Hal ini terjadi karena adanya trigger updateStokPemb dimana setelah praktikkan menambahkan data pada tabel pembelian dengan JML_BELI 60 ditambah dengan bonus 5, sehingga STOK pada tabel barang yang awal mulanya 100 menjadi 35. Sesuai dengan perintah tugas praktikum bahwa aturan penyesuaian stok barang masih berlaku, setiap ada pembelian maka stok akan berkurang. Maka hal tersebut mengakibatkan STOK pada ID_BRG A10 berubah menjadi 35.
5. Tugas Rumah 5.1 Buat Tabel pembayaran
Tabel yang pertama bernama pembayaran, dengan memiliki 2 field yaitu ID_PEM yang bertipe data INT dengan length 10. Field kedua yaitu JML_PEM yang bertipe data INT dengan length 15. ID_PEM di set sebagai primary key karena bersifat unik. Kemudian
eksekusi pernyataan penciptaan tabel dan penambahan data pada tabel tersebut dengan klik Go.
Maka tabel pembayaran berhasil dibuat.
Setelah eksekusi penciptaan tabel kemudian kita klik tabel pembayaran dan pilih Structure. Maka akan menampilkan struktur dari tabel pembayaran.
Setelah mebuat tabel pembayaran sesuai dengan perintah tugas rumah pertama yaitu menambahakan field HARGA pada tabel barang, dengan eksekusi perintah sebagai berikut
Setelah itu praktikkan menyeleksi data pada tabel dengan eksekusi perintah
Sehingga data pada tabel barang akan ditampilkan
Karena pada field HARGA belum diambahkan data maka praktikkab UPDATE data pada tabel barang dengan eksekusi perintah berikut
Setelah itu seleksi data pada tabel barang untuk melihat data setelah di UPDATE.
Sehingga akan menampilkan data barang setelah di UPDATE field HARGA.
Setelah membuat tabel pembayaran, dan UPDATE tabel barang, praktikkan membuat trigger sesuai dengan perintah tugas rumah nomor 1. Praktikkan membuat trigger dengan nama pembayaran yang dieksekusi awal adalah tabel pembelian dengan trigger time BEFORE dan trigger event INSERT kemudian praktikkan mendeklarasikan TOTAL yang bertipe data INT. Kemudian dengan pernyataan IF dengan kondisi apabila JML_BELI kurang dari STOKdalam tabel barang maka eksekusi TOTAL sebagai HARGA pada tabel barang dimana ID_BRG merupakan new.ID_BRG dikali dengan new.JML_BELI. Setelah itu praktikkan membuat trigger INSERT INTO pembayaran dengan pernyataan IF dengan ketentuan apabila JML_BELI lebih dari 50 dan kurang dari 100, maka JML_BELI ditambahkan 5, karena sesuai dengan perintah bahwa pembelian diatas 50 dan kurang dari 100 mendapatakan bonus 5. Pernyataan ELSE IF dengan ketentuan apabila JML_BELI lebih dari 100 dan kurang dari 150, maka JML_BELI ditambahkan 10, karena sesuai dengan perintah bahwa pembelian diatas 100 dan kurang dari 150 mendapatakan bonus 10. Pernyataan ELSE IF dengan ketentuan apabila JML_BELI lebih dari 150, maka JML_BELI ditambahkan 20, karena sesuai dengan perintah bahwa pembelian diatas 150 mendapatakan bonus 20. Trigger selanjutnya dengan pernyataan UPDATE pada tabel barang dimana STOK adalah hasil dari pengurangan STOK dengan JML_BELI dimana ID_BRG merupakan new.ID_BRG. Kemudian adalah UPDATE pembayaran dimana JML_PEM sama dengan TOTAL, ID_PEM sama dengan new.ID_PEM. Setelah itu pernyataan ELSE, set @STATUS sama dengan STOK KURANG/HABIS digunakan apabila STOK barang tidak memenuhi jumlah pembelian.
Kemudian eksekusi pembuatan trigger pembayaran, sehingga akan menampilkan seperti berikut :
Setelah pembuatan trigger, praktikkan akan menambahkan data pada tabel pembelian dengan eksekusi pernyataan dibawah ini
Setelah itu praktikkan cek data pada tabel pembelian dengan seleksi tabel pembelian
Sehingga menampilkan data pada tabel pembelian
Pada tabel tersebut menampilkan bahwa JML_BELI dari ID_PEM 2 dan ID_BRG A11 adalah 120, padahal praktikkan menambahkan data dengan JML_BELI 110, hal itu terjadi karena adanya trigger pembayaran, dimana apabila JML_BELI lebih dari 100 maka akan mendapatkan bonus 10, sehingga JML_BELI yang awalnya 110 menjadi 120. Setelah eksekusi data pada tabel pembelian, praktikkan eksekusi data pada tabel barang dengan mengeksekusi pernyataan sebagai berikut
Dan akan menampilkan data pada tabel barang.
Terlihat bahwa STOK dari ID_BRG A11 berubah. Hal ini terjadi karena adanya trigger pembayaran dimana setelah praktikkan menambahkan data pada tabel pembelian dengan JML_BELI 110 ditambah dengan bonus 10, sehingga STOK pada tabel barang yang awal mulanya 200 menjadi 80. Sesuai dengan perintah tugas rumah no 1 bahwa aturan penyesuaian stok barang masih berlaku, setiap ada pembelian maka stok akan berkurang. Maka hal tersebut mengakibatkan STOK pada ID_BRG A11 berubah menjadi 80. Setelah itu praktikkan eksekusi tabel pembayaran
Dan menampilkan data pada tabel pembayaran seperti berikut
Tabel pembayaran yang semula kosong, namun setelah penambahan data pada tabel pembelian, tabel pembayaran menampilkan data dengan ID_PEM 2 dan JML_PEM 220000 hal tersebut dapat terjadi karena pada trigger pembayaran terdapat pernyataan bahwa JML_BELI pada tabel pembelian dikali dengan HARGA pada tabel barang, karena praktikkan menambahkan data pembelian dengan JML_BELI 110 dan HARGA barang yang dibeli adalah 2000, maka 110x2000 sehingga menghasilkan 220000.
Praktikkan lakukan lagi penambahan data lain, dengan eksekusi pernyataan berikut
Kemudian setelah penambahan data praktikkan seleksi pada tabel pembelian, menampilkan data-data pada tabel pembelian seperti berikut
JML_BELI pada tabel pembelian ID_BRG A12 adalah 180, karena praktikkan menambahkan data JML_BELI 160 dengan adanya trigger pembayaran terdapat ketentuan apabila JML_BELI lebih dari 150 maka mendapatkan bonus 20. Sehingga ketika praktikkan menambahkan data pembelian dengan ID_PEM 3, ID_BRG A12, dan JML_BELI adalah 160, berubah menjadi JML_BELI adalah 180. Kemudian praktikkan seleksi tabel barang dan menghasilkan tampilan sebagai berikut
Semula STOK pada ID_BRG A12 adalah 300, karena praktikkan menambahkan data pembelian barang A12 dengan 160 dan bonus 20 sehingga data STOK pada ID_BRG A12 menjadi 120. Setelah itu praktikkan seleksi tabel pembayaran, dan menampilkan data sebagai berikut
Tabel pembayaran menampilkan data dengan ID_PEM 3 dan JML_PEM 480000 hal tersebut dapat terjadi karena pada trigger pembayaran terdapat pernyataan bahwa JML_BELI pada tabel pembelian dikali dengan HARGA pada tabel barang, karena praktikkan menambahkan data pembelian dengan JML_BELI 160 dan HARGA barang yang dibeli adalah 3000, maka 160x3000 sehingga menghasilkan 480000.
5.2 Buat Tabel log_pembelian
Tabel yang kedua bernama log_pembelian, dengan memiliki 2 field yaitu field pertama yaitu OPERASI yang bertipe data bertipe data VARCHAR dengan length 300. Field kedua yaitu WAKTU yang bertipe data DATE. OPERASI di set sebagai primary key karena bersifat unik. Kemudian eksekusi pernyataan penciptaan tabel dan penambahan data pada tabel tersebut dengan klik Go.
Setelah eksekusi penciptaan tabel kemudian kita klik tabel pembayaran dan pilih Structure. Maka akan menampilkan struktur dari tabel pembayaran.
Kemudian praktikkan seleksi tabel log_pembelian dengan eksekusi Dan hasilnya adalah sebagai berikut
Setelah pembuatan tabel log_pembelian, praktikkan membuat 3 trigger, trigger yang pertama bernama logInsert dengan trigger time AFTER dan trigger event INSERT pada tabel pembelian, kemudian praktikkan mendeklarasikan KET yang bertipe data VARCHAR dengan length 300. Variabel KET di SET CONCAT atau menggabung antara
new.ID_PEM, new.ID_BRG, dan new.JML_BELI. Lalu INSERT INTO tabel log_pembelian dengan field (OPERASI, WAKTU) VALUES (KET,NOW()) jadi pada field OPERASI diisi oleh KET, dan field WAKTU diisi oleh NOW atau tanggal sekarang.
Setelah trigger tersebut dieksekusi akan menampilkan seperti pada gambar dibawah ini
Trigger yang kedua bernama logUpdate dengan trigger time AFTER dan trigger event UPDATE pada tabel pembelian, kemudian praktikkan mendeklarasikan KET yang bertipe data VARCHAR dengan length 300. Variabel KET di SET CONCAT atau menggabung antara old.ID_PEM, new.ID_PEM, old_ID_BRG, new.ID_BRG, dan old_JML_BELI, new.JML_BELI. Lalu INSERT INTO tabel log_pembelian dengan field (OPERASI, WAKTU) VALUES (KET,NOW()) jadi pada field OPERASI diisi oleh KET, dan field WAKTU diisi oleh NOW atau tanggal sekarang.
Setelah trigger tersebut dieksekusi akan menampilkan seperti pada gambar dibawah ini
Trigger yang ketiga bernama logDelete dengan trigger time AFTER dan trigger event DELETE pada tabel pembelian, kemudian praktikkan mendeklarasikan KET yang bertipe data VARCHAR dengan length 300. Variabel KET di SET CONCAT atau menggabung antara old.ID_PEM, old_ID_BRG, dan old_JML_BELI. Lalu INSERT INTO tabel log_pembelian dengan field (OPERASI, WAKTU) VALUES (KET,NOW()) jadi pada field OPERASI diisi oleh KET, dan field WAKTU diisi oleh NOW atau tanggal sekarang.
Setelah trigger tersebut dieksekusi akan menampilkan seperti pada gambar dibawah ini
Setelah praktikkan berhasil membuat ketiga trigger diatas, praktikkan mencoba menambahkan data dengan eksekusi pernyataan dibawah ini
Setelah itu praktikkan cek data setelah penambahan data pada tabel pembelian dengan cara
Sehingga hasil dari eksekusi pernyataan penambahan diatas adalah sebagai berikut
Setelah mencoba menambahkan data, kemudian praktikkan mencoba mengupdate data yang telah ditambahkan tadi dengan eksekusi pernyataan dibawah ini
Setelah itu praktikkan cek data setelah update data pada tabel pembelian dengan cara
Eksekusi update sebelumnya mengubah JML_BELI pada ID_PEM 4 dimana yang awal mulanya JML_BELI tersebut adalah 5, diubah menjadi 10.
Setelah mengupdate data ID_PEM 4, praktikkan akan menghapus data ID_PEM 4 dengan eksekusi pernyataan berikut
Kemudian muncul massage box, klik ok.
Setelah itu praktikkan cek data tabel pembelian dengan cara
Eksekusi tabel pembelian kali ini hanya menampilkan 3 record karena seblumnya ID_PEM 4 telah dihapus oleh praktikkan.
Setelah praktikkan mencoba menambahkan data (INSERT), mengubah data (UPDATE), dan menghapus data (DELETE), praktikkan akan mengeksekusi tabel log_pembelian dengan cara
Eksekusi perintah diatas menampilkan 3 record antara lain UPDATE DATA, INSERT DATA, DELETE DATA.
Hal tersebut terjadi karena adanya trigger logInsert, logUpdate, dan logDelete, sehingga ketika praktikkan menambahkan, mengedit, menghapus semua kegiatan yang berada pada tabel pembelian akan terekam pada tabel log_pembelian.
6. Kesimpulan Dalam praktikum modul 8 Trigger dapat disimpulkan bahwa : •
Trigger dapat didefinisikan sebagai himpunan kode (prosedural) yang dieksekusi secara otomatis sebagai respon atas suatu kejadian berkaitan dengan tabel basis data.
•
Trigger perlu dibuat pada saat : ✓ Membentuk sebuah aksi tertentu terhadap suatu event ✓ Memusatkan operasi global
•
Tipe trigger ada 2 macam, yaitu : ✓ Statement : trigger dijalankan sekali saja pada saat terjadi sebuah event. Statement trigger juga dijalankan sekali, meskipun tidak ada satupun baris yang dipengaruhi oleh event yang terjadi. ✓ Row : trigger dijalankan pada setiap baris yang dipengaruhi oleh terjadinya sebuah event. Row trigger tidak dijalankan jika event dari trigger tidak berpengaruh pada satu baris pun.
•
Sintak penulisan dari database trigger, berisi komponen berikut : ✓ Trigger timing : a. Untuk tabel : BEFORE, AFTER b. Untuk view : INSTEAD OF ✓ Trigger event : INSERT, UPDATE atau DELETE ✓ Nama tabel : yaitu nama tabel atau view yang berhubungan dengan trigger ✓ Tipe trigger : Baris atau Pernyataan (statement) ✓ klausa WHEN : untuk kondisi pembatasan ✓ trigger body : bagian prosedur yang dituliskan pada trigger
7. Daftar Pustaka Jurusan Teknik Elektro. 2017. Modul 8 : Trigger. Malang: Universitas Negeri Malang. Aza, Rafi. Stored Procedure, Functions, dan Trigger. 2011. http://rafieaza.blogspot.co.id/ 2011/09/stored-procedures-functions-dan-trigger.html, diakses pada pada tanggal 14 April 2017, pukul 14:10 WIB.