Basis Data Praktikum 9 (Latihan dan Studi Kasus Tigger): Membuat fitur yang mencatat log perubahan harga barang pada sebuah database penjualan.
Buatlah tabel produk di bawah
1.
CREATE TABLE produk (
-> kd_produk VARCHAR(6) CHARACTER
SET latin1 COLLATE latin1_swedish_ci NOT NULL,
-> nm_produk VARCHAR(100)
CHARACTER SET latin1 COLLATE latin1_swedish_ci,
-> harga INT(11),
-> PRIMARY KEY (kd_produk)
-> );
2.
Buatlah
tabel log_harga
CREATE TABLE log_harga (
-> log_id INT(11) AUTO_INCREMENT
NOT NULL,
-> kd_produk VARCHAR(8) CHARACTER SET
latin1 COLLATE latin1_swedish_ci,
-> harga_lama INT(11),
-> harga_baru INT(11),
-> waktu_perubahan DATETIME,
-> PRIMARY KEY (log_id)
-> );
3.
Membuat
Trigger
DELIMITER $$
CREATE TRIGGER before_produk_update
BEFORE UPDATE ON produk
FOR EACH ROW
BEGIN
INSERT INTO log_harga
set kd_produk = OLD.kd_produk,
harga_baru = new.harga,
harga_lama = old.harga,
waktu_perubahan = NOW();
END$$
DELIMITER;
Penjelasan Syntaks MySql
Baris 2 – membuat sebuah trigger baru dengan nama
before_produk_update
Baris 3 – trigger ini menggunakan event BEFORE UPDATE
Baris 6 – Query SQL untuk melakukan insert data ke
tabel log_harga
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);
2.
Update
harga produk, contoh
update produk set harga=10000 WHERE kd_produk='ATK001'
3.
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;
TUGAS! tidak selesai? lanjut kerjakan di rumah,
perbanyaklah latihan!
- Pada tabel log_harga tambahkan field:
o nm_produk_baru dengan tipe data
varchar (100)
ALTER
TABLE log_harga ADD nm_produk_baru VARCHAR (100)
o nm_produk_lama dengan tipe data
varchar (100)
ALTER
TABLE log_harga ADD nm_produk_lama VARCHAR (100)
- Uji cobakan triger yang dibuat dengan update:
DELIMITER $$
CREATE TRIGGER before_nm_produk_update
BEFORE UPDATE ON produk
FOR EACH ROW
BEGIN
INSERT INTO log_harga
set kd_produk = OLD.kd_produk,
nm_produk_baru = new.nm_produk,
nm_produk_lama = old.nm_produk,
waktu_perubahan = NOW();
END$$
DELIMITER;
o update
produk set nm_produk = ‘PENGGARIS’
WHERE kd_produk='ATK001';
Untuk mengecek perubahan dari log dengan cara
menggunakan select
select * from
log_harga;
Komentar
Posting Komentar