PRAKTIKUM 14
TRIGGER
Disusun oleh:
(Nama)
(NIM)
Dosen Pengampu:
Mudafiq Riyan Pratama, S.Kom, M.Kom
JURUSAN KESEHATAN
POLITEKNIK NEGERI JEMBER
2019
Praktikum 14
Trigger
Overview
Bab ini menjelaskan mengenai Trigger yang digunakan untuk memanggil satu atau
beberapa perintah SQL secara otomatis saat terjadi proses INSERT, UPDATE, atau
DELETE. Dalam bab ini dijelaskan mengenai definisi trigger, fungsi trigger dan
cara menerapkan membuat dan menghapus trigger.
2. TUJUAN:
1. Mengetahui definisi dan fungsi dari trigger di MySQL
2. Mampu menerapkan trigger di MySQL dalam beberapa studi kasus
3. DASAR TEORI
A. TRIGGER
Trigger digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis
sebelum atau sesudah terjadi proses INSERT, UPDATE, atau DELETE dari suatu tabel.
Sebagai contoh misalnya kita ingin menyimpan ID pelanggan secara otomatis ke tabel log
sebelum menghapus data di tabel pelanggan.
Trigger dapat didefinisikan sebagai himpunan kode (prosedural) yang dieksekusi secara
otomatis sebagai respon atas suatu kejadian berkaitan dengan tabel basis data. Berdasarkan
ruang lingkupnya, trigger diklasifikasikan menjadi dua jenis, yaitu:
- Row trigger (trigger baris) mendefinisikan aksi untuk setiap baris tabel.
- Statement trigger, hanya berlaku untuk setiap pernyataan INSERT, UPDATE, atau
DELETE.
Dari sisi perilaku eksekusi, trigger dapat dibedakan menjadi beberapa jenis, namun
umumnya ada dua jenis: Trigger BEFORE dan Trigger AFTER. Sesuai penamaannya, jenis-
jenis tersebut merepresentasikan waktu eksekusi trigger, misalkan sebelum ataukah sesudah
pernyataan yang berkorespondensi.
Apa perbedaan antara trigger dan store procedure? Trigger akan dipanggil secara
otomatis ketika event terjadi, sedangkan store procedure harus dipanggil secara eksplisit.
B. PENGGUNAAN TRIGGER
Trigger dibuat sesuai dengan keperluan. Ada kalanya trigger perlu dibuat, dan kadangkala
tidak perlu dibuat. Kapan trigger perlu dibuat?
- Ketika membentuk sebuah aksi tertentu terhadap suatu event
- Ketika memusatkan operasi global
Prosedur bisa dibuat dalam database, kemudian prosedur tersebut dipanggil pada trigger.
Jika penggunaan trigger terlalu berlebihan, maka akan menyebabkan terjadi sifat
ketidaktergantungan yang terlalu kompleks sehingga akan mempersulit pemeliharaan dari
aplikasi yang benar.
C. MEMBUAT TRIGGER BARU
Berikut ini bentuk umum perintah untuk membuat trigger:
Keterangan:
- BEFORE | AFTER digunakan untuk menentukan kapan proses secara otomatis akan
dieksekusi, sebelum atau sesudah proses.
- INSERT | UPDATE | DELETE digunakan untuk menentukan event yang dijadikan
trigger untuk menjalankan perintah-perintah di dalam trigger.
Statement atau perintah dalam trigger dapat berupa satu perintah saja, dan dapat juga
beberapa perintah sekaligus. Jika terdapat beberapa perintah dalam trigger, maka digunakan
perintah BEGIN dan END untuk mengawali dan mengakhiri perintah.
Di dalam statement trigger, kita dapat mengakses record tabel sebelum atau sesudah
proses dengan menggunakan NEW dan OLD. NEW digunakan untuk mengambil record
yang akan diproses (insert atau update), sedangkan OLD digunakan untuk mengakses record
yang sudah diproses (update atau delete).
Berikut ini contoh trigger yang akan mencatat aktivitas ke tabel log setiap terjadi proses
insert ke tabel pelanggan:
D. MENGHAPUS TRIGGER
Untuk menghapus trigger, dapat menggunakan perintah DROP TRIGGER dengan
diikuti dengan nama tabel dan nama triggernya. Berikut ini bentuk umum dan contoh perintah
untuk menghapus trigger.
Contoh:
1) TABEL MAHASISWA
Buatlah tabel sesuai dengan struktur tabel berikut:
SQL Query:
CREATE TABLE `mahasiswa` (
`nim` varchar(10) NOT NULL,
`nama` varchar(30),
`tempatlahir` varchar(10),
`tanggallahir` date,
`alamat` varchar(50),
`nohp` varchar(12),
`email` varchar(15),
`namaayah` varchar(30),
`namaibu` varchar(30),
`password` varchar(100),
PRIMARY KEY (nim)
);
2) TABEL logpasswordmahasiswa
Buatlah tabel dengan nama: logpasswordmahasiswa, dengan struktur tabel berikut:
SQL Query:
CREATE TABLE `logpasswordmahasiswa` (
`idlog` int(4) NOT NULL AUTO_INCREMENT,
`nim` varchar(10) NOT NULL,
`passwordlama` varchar(100) NOT NULL,
`passwordbaru` varchar(100) NOT NULL,
`tanggalubah` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON
UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(idlog)
);
Tabel ini akan kita gunakan untuk menyimpan log history perubahan password dari
mahasiswa.
SQL Query:
INSERT INTO `mahasiswa` (`nim`, `nama`, `tempatlahir`, `tanggallahir`,
`alamat`, `nohp`, `email`, `namaayah`, `namaibu`, `password`) VALUES
('E31171300', 'Umar', 'Jember', '2001-05-05', 'Jalan Srikoyo 78
Jember', '081112233445', 'umar@gmail.com', 'Khattab', 'Iswayanti',
'semangat45'),
('E31171301', 'Abdurrahman', 'Bondowoso', '2001-06-10', 'Jalan Mawar
89 Bondowoso', '08561122334', 'abdurr@gmail.co', 'Bilal', 'Zainab',
'password'),
('E31171302', 'Khalid', 'Lumajang', '2001-12-11', 'Jalan majapahit 23
Lumajang', '08145453423', 'khalid@yahoo.co', 'Walid', 'Zulaihah',
'password'),
('E31171303', 'Ustman', 'Pasuruan', '2001-02-23', 'Jalan A. Yani 78
Pasuruan', '08144557788', 'ustman@hotmail.', 'Affan', 'Azizah',
'password'),
('E31171304', 'Ali', 'Probolingg', '2001-01-01', 'Jalan Tirta 23
Probolinggo', '08566778899', 'ali@gmail.com', 'Abi Thalib', 'Aisyah',
'password'),
('E31171305', 'Abdullah', 'Situbondo', '2001-12-09', 'Jalan Marga 41
Situbondo', '08143901873', 'abdullah@yahoo.', 'Umar', 'Fatimah',
'password');
Trigger tersebut digunakan ketika ada perubahan pada tabel mahasiswa, maka akan merecord
password lama dan password baru pada tabel logpasswordmahasiswa.
Ternyata meskipun tidak mengubah password, trigger tetap menyimpan perubahan. Berarti
trigger yang kita buat ada kelemahannya. Solusinya bagaimana? Lihat langkah ke 7
Pada trigger tersebut, telah diberi kondisi jika password lama tidak sama dengan password
baru (dalam arti bahwa ada perubahan pada password), maka mengerjakan trigger insert into
logpasswordmahasiswa.
12) LATIHAN 1
12.1 Buatlah tabel rekening untuk menyimpan data rekening nasabah, berisi struktur tabel
sebagai berikut:
- norekening : INT
- namanasabah : VARCHAR
- tempatlahir : VARCHAR
- tanggallahir : DATE
- alamat : VARCHAR
- saldo : INT
12.2 Buatlah tabel transfer untuk menyimpan data transaksi transfer yang struktur
tabelnya sebagai berikut:
- notransaksi : INT AUTO_INCREMENT
- waktutransaksi : DATETIME
- norekpengirim : INT, FK REF rekening(norekening)
- norekpenerima : INT, FK REF rekening(norekening)
- nominaltransfer : INT
12.3 Jika ada penambahan data di tabel transfer (AFTER INSERT ON transfer), maka
akan mengupdate saldo pada tabel rekening yang bersangkutan sesuai dengan
nominaltransfer.
13) LATIHAN 2
13.1 Buatlah tabel produk untuk menyimpan data produk penjualan, berisi struktur tabel
sebagai berikut:
- kodeproduk : INT AUTO_INCREMENT
- namaproduk : VARCHAR
- hargaproduk : INT
- stok : INT
13.2 Buatlah tabel penjualan untuk menyimpan data penjualan produk, yang struktur
tabelnya sebagai berikut:
- idpenjualan : INT AUTO_INCREMENT
- waktutransaksi : TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON
UPDATE CURRENT_TIMESTAMP
- kodeproduk : INT, FK REF produk(kodeproduk)
- jumlahorder : INT
- totalharga : INT
13.3 Isikan data produk sebagai berikut:
13.4 Buatlah trigger yang berfungsi jika ada penambahan data pada penjualan, maka terjadi
pengurangan stok pada tabel produk. Pengurangan stok terjadi tergantung pada
jumlahorder setiap transaksi.
13.5 buatlah trigger yang berfungsi jika jumlah stok pada tabel produk nilainya 0, maka
tidak dapat melakukan transaksi penjualan (tidak dapat menambahkan data penjualan).
6. KESIMPULAN
(Kesimpulan apa yang dapat anda ambil dari praktikum modul ini?)