Anda di halaman 1dari 17

PRAKTIKUM

“TRIGGER”
ADMINISTRASI BASIS DATA

DISUSUN OLEH
MUHAMMAD RAFLI SALAM
425 18 045
2B TEKNIK KOMPUTER DAN JARINGAN

JURUSAN TEKNIK ELEKTRO


POLITEKNIK NEGERI UJUNG PANDANG
TAHUN AJARAN 2019/2020
25
PRAKTIKUM II
Trigger

1. Tujuan

Setelah menyelesaikan modul ini, anda diharapkan dapat :


1. Membuat trigger
2. Menjalankan trigger

2. Dasar Teori

Trigger adalah sebuah objek database yang diasosiasikan dengan sebuah tabel dan akan
aktif (terpicu/trigger) ketika sebuah event terjadi pada tabel tersebut. Trigger hanya terjadi
ketika ada eksekusi INSERT, DELETE dan UPDATE pada tabel yang bersangkutan. Waktu
eksekusi trigger yang mungkin terjadi terdiri dari dua yaitu BEFORE dan AFTER dari
statement SQL-nya.
Trigger terdapat pada hampir semua DBMS yang digunakan untuk mengelola dan
memantau tabel selama proses manipulasi data (INSERT, DELETE dan UPDATE). Trigger
dapat digunakan untuk berbagai tujuan anatara lain, mencatat (log) perubahan pada data tabel,
melakukan validasi, dan membuat backup atau duplikat data,. Trigger dapat meunculkan
peringatan atau bisa berupa aksi manipulasi yang lain pada tabel berbeda.

CREATE TRIGGER nama_trigger


{BEFORE|AFTER}
{INSERT|UPDATE|DELETE}
ON nama_tabel
FOR EACH ROW
statemen-statemen

26
Contoh kasus (sistem pertokoan)
Tabel-tabel:
MYSQL:
CREATE TABLE produk (

id_produk int(5) NOT NULL PRIMARY KEY AUTO_INCREMENT,

nama_produk varchar(255) NOT NULL, harga int(10)


NOT NULL DEFAULT '0',

stok_produk int(10) NOT NULL DEFAULT '0'

CREATE TABLE produk_log (

id_log int(5) NOT NULL PRIMARY KEY AUTO_INCREMENT,

keterangan varchar(255) NOT NULL, waktu date


NOT NULL,

nama_produk varchar(255) NOT NULL, harga int(10)


NOT NULL DEFAULT '0',

stok_produk int(10) NOT NULL DEFAULT '0'

CREATE TABLE transaksi (

id_transaksi int(5) NOT NULL PRIMARY KEY AUTO_INCREMENT, id_produk int(5)


NOT NULL,

jumlah int(5) NOT NULL, total


int(10) NOT NULL, tgl date NOT
NULL, FOREIGN KEY (id_produk)

REFERENCES produk(id_produk)

27
ORACLE SQL:
############# Table 1 ###########
CREATE TABLE tbl_produk (

id_produk int NOT NULL PRIMARY KEY,


nama_produk varchar(255) NOT NULL,

harga int NOT NULL, stok_produk int


NOT NULL

CREATE SEQUENCE tbl_produk_sequence;

CREATE OR REPLACE TRIGGER tbl_produk_on_insert BEFORE INSERT


ON tbl_produk

FOR EACH ROW


BEGIN

SELECT tbl_produk_sequence.nextval INTO


:new.id_produk

FROM dual;

END;

############# Table 2 ###########

CREATE TABLE tbl_produk_log ( id_log int NOT NULL


PRIMARY KEY, keterangan varchar(255) NOT
NULL, waktu date NOT NULL,

nama_produk varchar(255) NOT NULL, harga int


NOT NULL,

stok_produk int NOT NULL

CREATE SEQUENCE tbl_produk_log_sequence;

CREATE OR REPLACE TRIGGER tbl_produk_log_on_insert BEFORE INSERT 28


ON tbl_produk_log
FOR EACH ROW
BEGIN

SELECT tbl_produk_log_sequence.nextval INTO


:new.id_log

FROM dual;

END;

############# Table 3 ###########

CREATE TABLE tbl_transaksi ( id_transaksi int


PRIMARY KEY, id_produk int NOT NULL,
jumlah int NOT NULL,

total int NOT NULL, tgl date NOT


NULL, CONSTRAINT fk_column

FOREIGN KEY (id_produk) REFERENCES


tbl_produk (id_produk)

);

CREATE SEQUENCE tbl_transaksi_sequence;

CREATE OR REPLACE TRIGGER tbl_transaksi_on_insert BEFORE INSERT


ON tbl_transaksi

FOR EACH ROW


BEGIN

SELECT tbl_transaksi_sequence.nextval INTO


:new.id_transaksi

FROM dual;

END;

A. Contoh kasus log


- Contoh pembuatan query log (studi kasus perubahan produk):
MYSQL :
DELIMITER $$ 29

CREATE TRIGGER perubahan_produk AFTER INSERT ON produk


FOR EACH ROW BEGIN
INSERT INTO produk_log (keterangan, waktu,
nama_produk, harga, stok_produk) VALUES('tambah', now(),
new.nama_produk, new.harga, new.stok_produk);
END $$
DELIMITER ;

ORACLE SQL:
CREATE OR REPLACE TRIGGER tbl_produk_log_data_baru
AFTER INSERT ON tbl_produk FOR
EACH ROW

BEGIN
INSERT INTO TBL_PRODUK_LOG (KETERANGAN, WAKTU,
NAMA_PRODUK, HARGA, STOK_PRODUK)
VALUES ('tambah', SYSDATE, :new.nama_produk, :new.harga,
:new.stok_produk);
END;

B. Contoh Trigger Manipulasi


- Contoh query membuat update (studi kasus update stok):
MYSQL :
DELIMITER $$
CREATE TRIGGER stok_produk_update AFTER INSERT ON

transaksi FOR EACH ROW BEGIN

UPDATE produk SET stok_produk=stok_produk-


NEW.jumlah

WHERE id_produk=NEW.id_produk; END $$

DELIMITER ;

ORACLE SQL:
CREATE OR REPLACE TRIGGER transaksi_data_baru
AFTER INSERT ON tbl_transaksi FOR EACH
30
ROW

BEGIN
UPDATE TBL_PRODUK SET STOK_PRODUK=STOK_PRODUK-
:new.jumlah WHERE id_produk=:new.id_produk;

END;

3. Daftar Alat dan Bahan


1. Personal Komputer 1 Unit
2. Software DBMS (MS. Access, SQL Server, MySQL, Visual Foxpro)

4. Keselamatan Kerja
1. Sebelum melakukan langkah percobaan, pastikan kabel power terhubung ke Power
Supply.
2. Matikan komputer setelah praktikum selesai.

5. Langkah Kerja

 MySQL

1. Buatlah sebuah trigger untuk melakukan logging aktivitas pada sebuah tabel

CREATE TABLE user (


id_user int(5) NOT NULL PRIMARY KEY AUTO_INCREMENT,
nama varchar(255) NOT NULL,
no_hp varchar(255) NOT NULL,
foto varchar(255),
jenis_kelamin varchar(255),
tanggal_lahir date
);

CREATE TABLE user_log (


id_user_log int(5) NOT NULL PRIMARY KEY AUTO_INCREMENT,
nama varchar(255) NOT NULL,
keterangan varchar(255) NOT NULL,
waktu date);

31
- INSERT

 Buat perintah trigger INSERT

DELIMITER $$
CREATE TRIGGER user_logging
AFTER INSERT ON user
FOR EACH ROW
BEGIN
INSERT INTO user_log (id_user,nama,keterangan,waktu)
VALUES (new.id_user,new.nama,'new',now());
end $$
DELIMITER ;

 Masukkan data pada table user

 Data yang telah ditambahkan pada table user akan tampil pada table user_log sebagai
fungsi trigger yang telah di setting sebelumnya

- UPDATE

 Buat perintah trigger UPDATE

DELIMITER $$
CREATE TRIGGER user_log_update
AFTER UPDATE ON user
FOR EACH ROW
BEGIN 32
INSERT INTO user_log (id_user,nama,keterangan,waktu)
VALUES (old.id_user,old.nama,'updated',now());
end $$
DELIMITER ;

 Perbarui data yang akan trigger

Saya meng-update data Nama yang sebelumnya “Muhammad rafli” menjadi


“Muhammad rafli salam”

 Tampilan pada table user_log

- DELETE

 Buat sebuah trigger DELETE

DELIMITER $$
CREATE TRIGGER user_log_delete
AFTER DELETE ON user
FOR EACH ROW
BEGIN
INSERT INTO user_log (id_user,nama,keterangan,waktu)
VALUES (old.id_user,old.nama,'deleted',now());
end $$
DELIMITER ;

33
 Siapkan data yang akan di DELETE

 Data yang sudah di delete pada table user akan tampil riwayatnya pada table user
log

2. Buatlah sebuah trigger dimana aktivitas sebuah table akan memicu manipulasi data
(INSERT,UPDATE,ATAU DELETE)

 Buat table untuk aktivitas trigger manipulasi

CREATE TABLE kos (


id_kos int(5) NOT NULL PRIMARY KEY AUTO_INCREMENT,
nama_kos varchar(255) NOT NULL,
jenis_kos varchar(255) NOT NULL,
id_pemilik varchar(255),
jumlah_kamar varchar(255),
foto varchar(255),
tipe varchar(255),
deskripsi varchar(255)
);

CREATE TABLE pembelian_kos(


id_kamar int(5) NOT NULL PRIMARY KEY AUTO_INCREMENT,
id_kos int(5) NOT NULL,
foto varchar(255), 34
harga int(25) NOT NULL,
jumlah_kamar int(25) NOT NULL,
fasilitas varchar(255),
luas varchar(255),
constraint fk_kamar
foreign key(id_kos)
references kos(id_kos)
);

 Buat perintah trigger

DELIMITER $$
CREATE TRIGGER kamar_jual
AFTER INSERT ON pembelian_kamar
FOR EACH ROW
BEGIN
UPDATE kos set jumlah_kamar=jumlah_kamar-new.jumlah_kamar
WHERE id_kos=new.id_kos;
end $$
DELIMITER ;

 Perhatikan jumlah kamar pada table kos

 Tambahkan data pada table pembelian_kos

 Jika proses trigger berhasil maka jumlah kamar pada table kos akan berkurang

 ORACLE

1. Buatlah sebuah trigger untuk melakukan logging aktivitas pada sebuah tabel 35

 Buat terlebih dahulu tabel yang akan saling mengtrigger


CREATE OR REPLACE TRIGGER TBL_USER_on_insert
BEFORE INSERT ON TBL_USER
FOR EACH ROW
BEGIN
SELECT TBL_USER_sequence.nextval
INTO :new.ID_USER
FROM dual;
END;

CREATE SEQUENCE TBL_USER_sequence;

CREATE OR REPLACE TRIGGER TBL_USER_on_insert


BEFORE INSERT ON TBL_USER
FOR EACH ROW
BEGIN
SELECT TBL_USER_sequence.nextval
INTO :new.ID_USER
FROM dual;
END;

 Tabel user sebagai tabel yang memicu trigger

CREATE TABLE TBL_USER_LOG


(
ID_LOG NUMBER(38,0) NOT NULL PRIMARY KEY
, ID_USER NUMBER(38,0) NOT NULL
, NAMA VARCHAR2(255) NOT NULL
, KETERANGAN VARCHAR2(255) NOT NULL
, WAKTU DATE NOT NULL
);

CREATE SEQUENCE TBL_USER_LOG;

CREATE OR REPLACE TRIGGER TBL_USER_LOG_on_insert


BEFORE INSERT ON TBL_USER_LOG
FOR EACH ROW
BEGIN
SELECT TBL_USER_LOG_SEQUENCE.nextval
INTO :new.ID_LOG
FROM dual;
END;

36
Tabel user_log nantinya akan mencatat perubahan terkait trigger terhadap tabel
user

 Selanjutnya, buat perintah trigger

- INSERT

CREATE OR REPLACE TRIGGER TBL_USER_LOG_NEW

AFTER INSERT ON TBL_USER


FOR EACH ROW
BEGIN
INSERT INTO TBL_USER_LOG (ID_USER,NAMA,KETERANGAN, WAKTU)
VALUES (:NEW.ID_USER,:NEW.NAMA,'NEW', SYSDATE);
END;

 Masukkan data pada table user

 Data yang di tambahkan pada table user akan muncul di table user_log

- UPDATE

CREATE OR REPLACE TRIGGER TBL_USER_LOG_AFTER_UPDATE


AFTER UPDATE ON TBL_USER
FOR EACH ROW
BEGIN
INSERT INTO TBL_USER_LOG (ID_USER,NAMA,KETERANGAN, WAKTU)
VALUES (:NEW.ID_USER,:NEW.NAMA,'UPDATE', SYSDATE);
END;

37
 Pada perintah kali ini saya akan meng-update data sebelumnya agar table user log
ke trigger karena perubahan pada table user
 Pada kolom nama, saya meng-update data yang sebelumnya “Rafli” menjadi
“Muhammad Rafli” dan ini yang terjadi pada table user log

Data “rafli” di table log tidak akan terhapus melainkan menjadi riwayat data
sebelumnya

- DELETE

CREATE OR REPLACE TRIGGER TBL_USER_LOG_AFTER_DELETE


AFTER DELETE ON TBL_USER
FOR EACH ROW
BEGIN
INSERT INTO TBL_USER_LOG (ID_USER,NAMA,KETERANGAN, WAKTU)
VALUES (:NEW.ID_USER,:NEW.NAMA,'DELETE', SYSDATE);
END;

 Pada perintah kali ini saya akan DELETE data “Muhammad rafli” agar table user
log ke trigger karena perubahan pada table user

Data “Muhammad Rafli” yang sudah dihapus pada table user akan muncul
riwayatnya pada table user log

2. Buatlah sebuah trigger dimana aktifitas pada sebuah tabel akan memicu manipulasi data
(INSERT atau DELETE atau UPDATE) pada tabel lain.
38
 Buatlah table untuk aktivitas trigger manipulasi
CREATE TABLE TBL_KOS

(
ID_KOS NUMBER(38,0) NULL PRIMARY KEY
, NAMA_KOS VARCHAR2(255)
, COLUMN1 VARCHAR2(255)
, ID_PEMILIK NUMBER(38,0)
, JUMLAH_KAMAR NUMBER(38,0)
, FOTO VARCHAR2(255)
, TIPE VARCHAR2(255)
, DESKRIPSI VARCHAR2(255)
, LATTITUDE NUMBER(38,0)
, LONGITUDE NUMBER(38,0)
, ID_KEC NUMBER(38,0)
);

CREATE SEQUENCE TBL_KOS_sequence;

CREATE OR REPLACE TRIGGER TBL_KOS_on_insert


BEFORE INSERT ON TBL_KOS
FOR EACH ROW
BEGIN
SELECT TBL_KOS_sequence.nextval
INTO :new.ID_KOS
FROM dual;
END;

CREATE TABLE TBL_KAMAR


(
ID_KAMAR NUMBER(38,0) PRIMARY KEY
, ID_KOS NUMBER(38,0) NOT NULL
, FOTO VARCHAR2(255) NOT NULL
, HARGA NUMBER(38,0) NOT NULL
, JUMLAH_KAMAR(38,0) NOT NULL
, LUAS VARCHAR2(255) NOT NULL
, FASILITAS VARCHAR2(255) NOT NULL
, CONSTRAINT fk_kamar
, FOREIGN KEY (ID_KOS)
, REFERENCES TBL_KOS (ID_KOS)
);
39

CREATE SEQUENCE TBL_KAMAR_sequence;


CREATE OR REPLACE TRIGGER TBL_KAMAR_on_insert
BEFORE INSERT ON TBL_KAMAR
FOR EACH ROW
BEGIN
SELECT TBL_KAMAR_sequence.nextval
INTO :new.ID_KAMAR
FROM dual;
END;

 Buat Perintah Trigger

CREATE OR REPLACE TRIGGER TBL_KAMAR_UPDATE


AFTER INSERT ON TBL_KAMAR
FOR EACH ROW
BEGIN
UPDATE TBL_KOS SET JUMLAH_KAMAR=JUMLAH_KAMAR-:NEW.JUMLAH_KAMAR WHERE
ID_KOS=:NEW.ID_KOS;
END;

 Isi data pada tabel kos

Perhatikan pada kolom “JUMLAH_KAMAR” terdapat data “100”

 Dan tambahkan data juga pada tabel kamar seolah-olah kamar tersebut di booking
oleh seseorang

 Jika trigger berhasil, maka otomatis jumlah_kamar pada table kos akan berkurang

40
KESIMPULAN

Trigger digunakan untuk memanggil satu atau beberapa perintah ! / secara otomatis
sebelumatau sesudah terjadi proses INSERT, UPDATE, dan DELETE dari suatu tabel.
Trigger sering digunakan , antara lain :
• Melakukan update data otomatis jika terjadi perubahan. 6ontohnya adalah dalam sistem
penjualan, jika dientri barang baru maka stock akan bertambah secara otomatis.
• Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. !etiap terjadi
perubahan, secara otomatis akan menyimpan ke tabel log.
• Trigger dapat digunakan untuk melakukan 1alidasi dan 1erifikasi data sebelum datatersebut
disimp

41

Anda mungkin juga menyukai