0% menganggap dokumen ini bermanfaat (0 suara)
101 tayangan5 halaman

Trigger On Mysql

Trigger digunakan untuk memanggil perintah SQL secara otomatis sebelum atau sesudah proses INSERT, UPDATE atau DELETE pada suatu tabel. Trigger dapat membuat entri baru pada tabel lain berdasarkan aktivitas yang terjadi pada tabel utama untuk keperluan log, audit, atau integrasi data. Contohnya membuat entri log setiap kali terjadi perubahan pada tabel program.

Diunggah oleh

Ni Kadek Sumarwati
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
101 tayangan5 halaman

Trigger On Mysql

Trigger digunakan untuk memanggil perintah SQL secara otomatis sebelum atau sesudah proses INSERT, UPDATE atau DELETE pada suatu tabel. Trigger dapat membuat entri baru pada tabel lain berdasarkan aktivitas yang terjadi pada tabel utama untuk keperluan log, audit, atau integrasi data. Contohnya membuat entri log setiap kali terjadi perubahan pada tabel program.

Diunggah oleh

Ni Kadek Sumarwati
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 5

TRIGGER on MYSQL

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 adalah suatu objek database yang merupakan aksi atau prosedur yang
terjadi jika terjadi perubahan pada suatu row atau record. Trigger tidak dapat
menjadi bagian dari suatu temporary table atau suatu view.

Membuat Trigger
Berikut adalah query dasar membuat trigger:
DELIMITER $$
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name FOR EACH ROW
BEGIN
trigger_body
END $$

Keterangan:

trigger_name
: nama trigger
trigger_time
: kapan kita mengeksekusi trigger, apakah
sebelum [BEFORE] atau sesudah [AFTER] proses.
trigger_event
: merupakan event atau peristiwa yang
menyebabkan trigger dilakukan. Event yang dimaksud
adalah INSERT, UPDATE, DELETE.
table_name
: nama tabel.
trigger_body
: statement statement SQL yang akan
dilakukan. Jika perintahnya lebih dari satu, maka digunakan
blok statement BEGIN . . . END
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).

Penggunaan trigger_time BEFORE


Untuk trigger yang menggunakan time BEFORE, event yang dapat digunakan
adalah INSERT, UPDATE dan DELETE. Contoh penggunaannya adalah sebagai
berikut:
Kita akan menggunakan trigger untuk membuat tabel log untuk tabel grade,
maka terlebih dahulu kita membuat tabel log_grade dengan query sbb:

CREATE TABLE log_grade LIKE grade;


Query diatas akan menghasilkan tabel baru log_grade yang strukturnya sama
seperti tabel grade. Kemudian tambahkan sebuah field tanggal yang bertipe data
DATE pada table log_grade.
ALTER TABLE log_grade ADD tanggal DATE;
dan
ALTER TABLE log_grade ADD proses VARCHAR(30);
Penambahan field tanggal dan proses adalah untuk mencatat waktu terjadinya
proses pada tabel grade dan proses apa yang menyertainya. Selanjutnya kita
akan membuat trigger sebagai berikut:
DELIMITER $$
CREATE TRIGGER doinsert_beforeinsert_grade BEFORE INSERT ON grade
FOR EACH ROW
BEGIN
INSERT INTO log_grade VALUES
(new.grade_id,new.nilai,new.discount,NOW(),Before Insert);
END $$
Query diatas akan menghasilkan trigger yang berfungsi melakukan insert data
pada log_grade ketika terjadi insert data pada tabel grade. Record yang di insert
pada kedua tabel tersebut sama, namun pada tabel log_grade akan dicatat pula
tanggal record tersebut di insert serta bagaimana trigger_time dan trigger_event
yang digunakan.

DELIMITER $$
CREATE TRIGGER doinsert_beforeupdate_grade BEFORE UPDATE ON grade
FOR EACH ROW
BEGIN
INSERT INTO log_grade
VALUES(new.grade_id,new.nilai,new.discount,NOW(),Before Update);
END $$
Query diatas akan menghasilkan trigger yang berfungsi melakukan insert data
pada log_grade ketika terjadi update data pada tabel grade. Record yang di
insert pada tabel log_grade merupakan record yang akan diupdate di tabel
grade. Dan juga akan ditambahkan tanggal kapan record tersebut dipudate serta
bagaimana trigger_time dan trigger_event yang digunakan.
Kemudian, lakukan insert dan record pada tabel grade menggunakan query
berikut:
INSERT INTO grade VALUES (D,0-50,0%);
Perhatikan pada tabel log_grade, apakah record yang baru ditambahkan pada
tabel grade juga ditambahkan pada tabel log_grade? Perhatikan pula field
tanggal dan prosesnya.

UPDATE grade SET nilai=51-74 WHERE grade_id=C;


Perhatikan pada tabel log_grade, apakah record yang baru saja diupdate pada
tabel grade juga ditambahkan pada tabel log_grade? Perhatikan pula field
tanggal dan prosesnya.

Penggunaan trigger_time AFTER


Sama seperti trigger_time BEFORE, event yang dapat digunakan adalah INSERT,
UPDATE dan DELETE. Contoh penggunaannya adalah sebagai berikut:
DELIMITER $$
CREATE TRIGGER doinsert_afterdelete_grade AFTER DELETE ON grade
FOR EACH ROW
BEGIN
INSERT INTO log_grade VALUES(old.grade_id,old.nilai,old.discount,NOW(),'After
Delete');
END $$
Query diatas akan menghasilkan Trigger yang berfungsi melakukan insert data
ke tabel log_grade ketika telah terjadi event delete di tabel grade. Pada event
delete hanya terdapat data OLD, karena jika record di delete, maka record
tersebut disebut OLD (data lama/usang). Perhatikan contoh trigger selanjutnya.
DELIMITER $$
CREATE TRIGGER doinsert_afterinsert_grade AFTER INSERT ON grade
FOR EACH ROW
BEGIN
INSERT INTO log_grade
VALUES(new.grade_id,new.nilai,new.discount,NOW(),'After Insert');
END $$
Query diatas akan menghasilkan Trigger yang berfungsi melakukan insert data
ke tabel log_grade ketika telah terjadi event insert di tabel grade. Berbeda
dengan event delete yang hanya terdapat data OLD, pada event justru hanya
terdapat data NEW, karena jika record di insert, maka record tersebut artinya
baru saja terbentuk atau disebut NEW (data baru). Perhatikan contoh
selanjutnya.
DELIMITER $$
CREATE TRIGGER doinsert_afterupdate_grade AFTER UPDATE ON grade
FOR EACH ROW
BEGIN
INSERT INTO log_grade VALUES(old.grade_id,old.nilai,new.discount,NOW(),'After
Update');
END $$
Query diatas akan menghasilkan Trigger yang berfungsi melakukan insert data
ke tabel log_grade ketika telah terjadi event update di tabel grade. Jika pada
event insert hanya terdapat data NEW, dan pada event delete hanya terdapat
data OLD, maka pada event update terdapat data OLD dan juga NEW. Data atau
record sebelum diupdate disebut OLD, sedangkan data atau record setelah
diupdate disebut NEW.

LATIHAN
Buatlah sebuah tabel baru yang mencatat aktifitas event pada tabel program.
Struktur tabel baru tersebut adalah sebagai berikut:
Field/ Kolom
program_id
program_name
fee
program_duration
tgl_event
eventnya

log_program
Tipe Data
VARCHAR
VARCHAR
DECIMAL
VARCHAR
DATE
VARCHAR

Panjang Data
5
30
10
30

Kemudian, buatlah 3 buah Trigger yang akan mencatat event (INSERT, UPDATE,
DELETE) yang terjadi pada tabel program. Untuk trigger_time silahkan dipilih
AFTER atau BEFORE. Setelah itu, lakukan insert, update, dan delete data pada
tabel program. Perhatikan apakah trigger yang dibuat sudah berhasil.
Record untuk di insert:
program_id
program_name
PB001
Grammar

fee
1000000

program_duration
24

Record untuk di update:


Ubah program_name menjadi IELTS Preparation dan program_duration menjadi
36 untuk program_id PB001
Record untuk di delete:
Delete record dengan program_id PB001
KESIMPULAN

Anda mungkin juga menyukai