Anda di halaman 1dari 9

MODUL PRAKTIKUM BASIS DATA LANJUT

TRIGGER – DML TRIGGER

a. Dasar Teori

Trigger dalam database adalah kode prosedural yang secara otomatis


dijalankan untuk menanggapi perubahan tertentu pada table tertentu atau
tampilan dalam database. Jadi trigger merupakan stored procedure khusus
yang akan terpicu atau dijalankan secara otomatis ketika terdapat sebuah
event/kejadian terjadi dalam sebuah database, objek database, maupun
kejadian yang terjadi pada server database.
Meskipun trigger sedikit mirip dengan stored procedure, namun
trigger memiliki karakteristik tertentu yang membedakan dengan stored
procedure, yaitu :
• Trigger tidak dapat di ekseskusi secara manual oleh user.
• Trigger tidak membutuhkan parameter dari user.
• User tidak dapat mengubah atau membuat event lain didalam
trigger.
Trigger penting digunakan karena didalam sebuah basis data
relasional dibutuhkan konsistensi data. Ini berarti bahwa informasi yang
disimpan dalam database harus konsisten setiap saat untuk setiap sesi dan
setiap transaksi. Cara mesin basis data relasional seperti SQL Server adalah
dengan menerapkan constraint seperti primmary dan foreign key. Tetapi
terkadang itu tidak cukup. Karena jika terdapat tabel diluar relasi dengan
tabel lain, maka penerapan constraint tidak akan bisa berjalan. Sehingga
dalam kasus seperti itu satu-satunya cara menjaga konsistensi data adalah
menggunakan trigger.
Didalam SQL Server, disediakan tiga jenis trigger yaitu :
• Data manipulation language (DML) triggers
Merupakan jenis trigger yang akan terpicu ketika event
INSERT, UPDATE, dan DELETE terjadi pada sebuah tabel.
• Data definition language (DDL) triggers
Merupakan jenis trigger yang akan terpicu ketika event
CREATE, ALTER, dan DROP terjadi. DDL triggers juga
akan memrespon ketika terdapat stored procedures yang
berjalan layaknya operasi DDL.
• Logon triggers
Merupakan jenis trigger yang akan terpicu ketika terdapa
event LOGON kedalam server database.
Di modul ini, kita akan membahas tentang DML Trigger. DML
Triggers memiliki akses ke dua tabel logika yang bernama tabel
INSERTED dan DELETED. Kedua tabel tersebut merupakan tabel
sementara yang berguna untuk menyimpan nilai sebelum dan setelahnya
pada tabel yang terpasang trigger.
Tabel DELETED akan menyimpan baris data yang terhapus dari
tabel yang terdapat trigger dengan operasi DELETE atau UPDATE. Pada
operasi DELETE, tabel DELETED akan menyimpan data yang terhapus
dari tabel. Sedangkan pada operasi UPDATE, tabel DELETED akan
menyimpan data lama yang akan digantikan oleh data baru.
Tabel INSERTED akan menyimpan baris data yang akan
dimasukkan kedalam tabel yang terdapat trigger dengan operasi INSERT
atau UPDATE. Pada operasi INSERT, tabel INSERTED akan berisi data
yang akan dimasukkan kedalam tabel. Sedangkan pada operasi UPDATE,
tabel INSERTED akan berisi data yang akan menimpa data yang sudah
ada.
DML Trigger sendiri dibagi menjadi dua jenis yaitu after triggers
dan instead of triggers. After triggers akan terpicu ketika operasi DML
sudah selesai. Sedangkan pada instead of triggers, operasi DML yang
terjadi akan diabaikan, dan operasi yang dijalankan adalah operasi yang
terdefinisi di trigger saja.
Membuat DML Trigger
CREATE TRIGGER namaTrigger
ON namaTabel
*JENIS TRIGGER *JENIS OPERASI
AS
Statement

Keterangan : *JENIS TRIGGER = AFTER atau INSTEAD OF


*JENIS OPERASI = INSERT atau UPDATE atau DELETE
Menghapus trigger
DROP TRIGGER namaTrigger

Mematikan trigger
--Mematikan trigger tertentu pada sebuah tabel
DISABLE TRIGGER namaTrigger ON namaTabel;

--Mematikan semua trigger pada sebuah tabel


DISABLE TRIGGER ALL ON namaTabel;

--Mematikan semua trigger didalam database


DISABLE TRIGGER ALL ON DATABASE;

Menyalakan trigger
--Mematikan trigger tertentu pada sebuah tabel
ENABLE TRIGGER namaTrigger ON namaTabel;

--Menyalakan semua trigger pada sebuah tabel


ENABLE TRIGGER ALL ON namaTabel;

--Menyalakan semua trigger didalam database


ENABLE TRIGGER ALL ON DATABASE;
b. Praktikum
a. Buatlah sebuah tabel untuk menyimpan log transaksi data di tabel
Production.ProductCategory. Buat tabel dengan nama
Production.ProductCategoryLog dengan ketentuan sebagai berikut :
Nama Kolom Tipe Data
ProductCategoryID INT
Name VARCHAR(50)
Operasi VARCHAR(50)
Waktu DATETIME

b. Buatlah sebuah trigger dengan nama trg_InsertKategoriProduk yang


akan terpicu ketika user menambahkan data baru kedalam tabel
Production.ProductCategory, maka selain data baru akan masuk
kedalam tabel Production.ProductCategory, data tersebut juga akan
terekam di tabel Production.ProductCategoryLog dengan ketentuan:
Kolom Values
ProductCategoryID ID Data yang di insert
Name Nama Data yang di insert
Operasi ‘Insert’
Waktu Waktu saat data dimasukkan

Contoh eksekusi seperti berikut :


Hasil :

c. Buatlah sebuah trigger dengan nama trg_DeleteKategoriProduk yang


akan terpicu ketika user menghapus data di tabel
Production.ProductCategory. Selain data akan terhapus dari tabel
Production.ProductCategory, data tersebut juga akan terekam di tabel
Production.ProductCategoryLog dengan ketentuan:
Kolom Values
ProductCategoryID ID Data yang di hapus
Name Nama Data yang di hapus
Operasi ‘Delete’
Waktu Waktu saat data dihapus

Contoh eksekusi seperti berikut :


Hasil :

d. Buatlah sebuah trigger dengan nama trg_UpdateKategoriProduk yang


akan terpicu ketika user mengubah data di tabel
Production.ProductCategory. Selain data akan berubah dari tabel
Production.ProductCategory, data perubahan tersebut juga akan
terekam di tabel Production.ProductCategoryLog dengan ketentuan:
Kolom Values
ProductCategoryID ID Data yang di ubah
Name Nama awal menjadi Nama baru
Operasi ‘Update’
Waktu Waktu saat data diupdate

Contoh eksekusi seperti berikut :


Hasil :

e. Buatlah sebuah tabel untuk menyimpan log transaksi data di tabel


HumanResources.Shift. Buat tabel dengan nama
HumanResources.ShiftLog dengan ketentuan sebagai berikut :
Nama Kolom Tipe Data
ShiftID INT
Name VARCHAR(50)
Peringatan VARCHAR(50)
Waktu DATETIME

f. Buatlah sebuah trigger dengan nama trg_InsertShift yang akan terpicu


ketika user memasukkan data ke tabel HumanResources.Shift. Ketika
trigger terpicu, data tidak akan masuk ke tabel HumanResources.Shift,
namun terekam di tabel HumanResources.ShiftLog dengan ketentuan:
Kolom Values
ShiftID ID Data yang dimasukkan
Name Nama shift yang akan di insert
Peringatan ‘User mencoba menambah shift
baru’
Waktu Waktu saat data diinsert

Contoh eksekusi seperti berikut :


Hasil :

g. Buatlah sebuah trigger dengan nama trg_UpdateShift yang akan terpicu


ketika user mengubah data di tabel HumanResources.Shift. Ketika
trigger terpicu, data di tabel HumanResources.Shift tidak akan terubah,
namun perubahan terekam di tabel HumanResources.ShiftLog dengan
ketentuan:
Kolom Values
ShiftID ID Data yang di ubah
Name ‘Nama shift lama menjadi nama
shift baru’
Peringatan ‘User mencoba mengubah shift’
Waktu Waktu saat data diubah

Contoh eksekusi seperti berikut :

Hasil :
h. Buatlah sebuah trigger dengan nama trg_DeleteShift yang akan terpicu
ketika user menghapus data di tabel HumanResources.Shift, maka akan
muncul pesan error ‘Anda tidak boleh menghapus data di tabel Shift’.
Note : Gunakan perintah RAISERROR (‘String’,Level,State) untuk
menampilkan pesan error. Nilai Level dan State diisikan dengan
bilangan numerik
Contoh ekseskusi seperti berikut :

Anda mungkin juga menyukai