Trigger DML di SQL Server

Panduan pemula untuk membuat, mengubah, menonaktivkan, mengaktivkan, dan menghapus trigger

M. Ramadhan
Telematika

--

Daftar Isi

· Pendahuluan
· Keuntungan
· Kerugian
· Membuat atau Mengubah Trigger DML
· Menonaktifkan dan Mengaktifkan Trigger
· Menghapus Trigger
· Penutup
· Daftar Pustaka

Pendahuluan

Trigger adalah serangkaian instruksi yang dieksekusi secara otomatis sebagai respons terhadap peristiwa atau tindakan tertentu dalam basis data. Trigger umumnya digunakan dalam sistem manajemen basis data relasional seperti Microsoft SQL Server, Oracle, MySQL, dan PostgreSQL.

Di SQL Server, ada tiga jenis trigger utama:

  1. Trigger DML. Trigger ini diaktifkan sebagai respons terhadap peristiwa DML (Data Manipulation Language) seperti pernyataan INSERT, UPDATE, dan DELETE.
  2. Trigger DDL. Trigger ini diaktifkan sebagai respons terhadap peristiwa DDL (Data Definition Language) seperti pernyataan CREATE, ALTER, dan DROP yang dijalankan di basis data atau server.
  3. Trigger logon. Trigger ini diaktifkan sebagai respons terhadap peristiwa LOGON, yang terjadi saat pengguna masuk ke instance SQL Server. Trigger masuk dapat melakukan tindakan atau menerapkan kebijakan yang berlaku untuk semua pengguna yang terhubung ke instance.

Artikel ini berfokus pada trigger DML. Misalnya, trigger dapat diatur untuk menjalankan serangkaian tindakan tertentu saat baris disisipkan, diperbarui, atau dihapus dari tabel di basis data. Trigger dapat digunakan antara lain untuk menegakkan aturan bisnis, menjaga integritas data, atau melakukan tugas audit.

Trigger dapat didefinisikan untuk dieksekusi sebelum atau setelah peristiwa trigger, dan dapat didefinisikan untuk dieksekusi pada level baris atau level pernyataan. Trigger juga dapat didefinisikan untuk dieksekusi pada kondisi atau kriteria tertentu.

Keuntungan

Ada beberapa keuntungan dalam menggunakan trigger DML (Data Manipulation Language) dalam basis data. Berikut adalah beberapa keuntungan utama.

  1. Otomatisasi dan konsistensi. Trigger DML memungkinkan otomatisasi tindakan atau operasi yang perlu dilakukan setelah atau sebelum perubahan data dilakukan. Dengan menggunakan trigger, Anda dapat memastikan bahwa tindakan yang diinginkan selalu dijalankan secara konsisten setiap kali operasi DML terjadi. Ini mengurangi risiko kesalahan manusia dan memastikan konsistensi data di dalam basis data.
  2. Integritas data. Trigger dapat digunakan untuk memvalidasi dan menerapkan aturan integritas data. Anda dapat memeriksa data yang dimasukkan atau diubah sebelum perubahan tersebut diterapkan pada tabel. Misalnya, Anda dapat memastikan bahwa data yang dimasukkan memenuhi persyaratan yang ditetapkan sebelum disimpan dalam tabel.
  3. Audit dan pelacakan perubahan. Trigger dapat digunakan untuk mencatat perubahan yang terjadi pada tabel. Ini memungkinkan Anda untuk membuat log aktivitas dan melacak siapa yang melakukan perubahan, kapan, dan apa yang telah diubah. Informasi audit ini berguna untuk tujuan pelacakan, pemulihan, kepatuhan, dan analisis.
  4. Sinkronisasi data. Trigger dapat digunakan untuk menyinkronkan atau memperbarui data di tabel lain saat perubahan terjadi pada tabel utama. Misalnya, jika ada perubahan di Tabel A, trigger dapat memperbarui Tabel B sesuai dengan perubahan tersebut. Ini memastikan konsistensi data antar tabel yang terkait.
  5. Pengendalian bisnis lanjutan. Trigger DML memungkinkan implementasi logika bisnis yang lebih kompleks di dalam basis data. Anda dapat menggunakan trigger untuk memicu proses atau tindakan tambahan, mengubah data sebelum disimpan, atau bahkan membatalkan operasi DML berdasarkan aturan bisnis yang telah ditentukan. Ini memberi Anda lebih banyak kontrol dan fleksibilitas dalam pengelolaan data.

Kerugian

Meskipun trigger DML memiliki beberapa keuntungan, penggunaannya juga dapat memiliki beberapa kerugian. Berikut adalah beberapa kerugian yang perlu diperhatikan:

  1. Performa. Penggunaan trigger DML yang berlebihan atau kompleks dapat mempengaruhi performa basis data. Setiap trigger yang diaktifkan saat operasi DML akan menambah beban kerja basis data. Jika terdapat banyak trigger atau jika logika di dalam trigger kompleks, ini dapat memperlambat waktu eksekusi dan mengurangi kinerja sistem secara keseluruhan. Oleh karena itu, perlu mempertimbangkan penggunaan trigger dengan hati-hati dan menguji dampaknya terhadap performa basis data.
  2. Kesulitan pemeliharaan. Ketika trigger digunakan secara luas, dapat menjadi sulit untuk memahami, mengelola, dan memelihara logika bisnis yang terkait dengan trigger tersebut. Jika terdapat banyak trigger yang saling terkait, ini dapat meningkatkan kompleksitas dan membuat pemeliharaan sistem menjadi rumit. Perubahan atau perbaikan pada logika trigger juga dapat menimbulkan risiko kesalahan atau dampak tidak terduga.
  3. Konsistensi dan keamanan. Jika trigger tidak dirancang atau diimplementasikan dengan benar, dapat timbul masalah konsistensi dan keamanan data. Logika trigger yang tidak tepat atau terdapat kesalahan dalam penanganan perubahan data dapat menyebabkan ketidaksesuaian atau kerusakan data. Oleh karena itu, perlu dilakukan pengujian dan pemeliharaan yang baik untuk memastikan konsistensi dan keamanan data.
  4. Kompleksitas logika bisnis. Trigger dapat menyebabkan kompleksitas logika bisnis tersembunyi di dalam basis data. Jika logika bisnis yang kompleks terkait dengan trigger, hal ini dapat mengaburkan pemahaman dan pemeliharaan sistem secara keseluruhan. Idealnya, logika bisnis yang lebih kompleks sebaiknya diimplementasikan di lapisan aplikasi yang lebih terstruktur dan dapat dikelola.
  5. Kesulitan pemecahan masalah. Ketika terjadi masalah atau kesalahan dalam trigger, memecahkan masalah tersebut dapat menjadi lebih rumit. Identifikasi dan pemecahan masalah dalam trigger mungkin memerlukan pemahaman yang mendalam tentang logika bisnis dan interaksi dengan tabel dan objek lain dalam basis data.

Dalam penggunaan trigger DML, perlu dilakukan evaluasi matang dan perencanaan yang baik untuk memahami kapan dan bagaimana trigger digunakan dengan efektif. Dengan pemahaman yang tepat tentang kerugian potensial dan penggunaan yang bijak, trigger dapat menjadi alat yang bermanfaat dalam mengelola perubahan data dalam basis data.

Membuat atau Mengubah Trigger DML

Gunakan sintaks berikut.

CREATE [ OR ALTER ] TRIGGER [schema_name.]trigger_name   
ON { table | view }
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
AS
kode_yang_akan_dieksekusi

Inilah arti setiap bagian dari sintaks.

  • CREATE TRIGGER
    Ini adalah perintah SQL untuk membuat trigger SQL.
  • [ OR ALTER ]
    Secara kondisional mengubah trigger hanya jika sudah ada.
  • [schema_name.]
    Nama skema tempat trigger DML berada. Trigger DML dicakup ke skema tabel atau tampilan tempat trigger tersebut dibuat. Schema_name tidak dapat ditentukan untuk trigger DDL atau logon.
  • trigger_name
    Ini adalah nama yang Anda berikan untuk trigger baru.
  • ON { table | viewname }
    Ini menentukan tabel atau tampilan tempat trigger akan dibuat.
  • { FOR | AFTER | INSTEAD OF}
    FOR atau AFTER menentukan bahwa trigger diaktifkan hanya ketika semua operasi yang ditentukan dalam pernyataan SQL trigger telah berhasil diluncurkan. Semua tindakan kaskade referensial dan pemeriksaan batasan juga harus berhasil sebelum trigger ini diaktifkan. Anda tidak dapat menentukan AFTER trigger pada view.
    INSTEAD OF menentukan bahwa trigger diaktifkan sebelum operasi yang ditentukan dalam pernyataan SQL trigger dijalankan. Paling banyak, Anda dapat menentukan satu trigger INSTEAD OF per pernyataan INSERT, UPDATE, atau DELETE pada tabel atau view.
  • AS
    Ini menunjukkan bahwa Anda akan memulai kode untuk dijalankan saat trigger diaktifkan.

Di bawah ini adalah trigger sederhana untuk mencegah penghapusan Employee (karyawan) mana pun.

CREATE OR ALTER TRIGGER DeleteEmployee 
ON Employee INSTEAD OF DELETE
AS
PRINT 'You can''t delete any employee.'
ROLLBACK TRANSACTION

Anda dapat melihat triggernya di panel kiri SQL Server Management Studio.

Jika Anda menghapus Employee:

DELETE Employee
WHERE Id = 17

Pesan kesalahan di bawah ini muncul.

You can't delete any employee.
Msg 3609, Level 16, State 1, Line 7
The transaction ended in the trigger. The batch has been aborted.

Menonaktifkan dan Mengaktifkan Trigger

Anda dapat menonaktifkan dan mengaktifkan trigger menggunakan sintaks berikut.

{DISABLE | ENABLE} TRIGGER {[schema_name.]trigger_name[, ...n] | ALL}  
ON {object_name | DATABASE | ALL SERVER}[;]

Jika Anda ingin menghapus karyawan, terlebih dahulu nonaktifkan trigger DeleteEmployee.

DISABLE TRIGGER DeleteEmployee
ON Employee

Setelah itu, jangan lupa untuk mengaktifkannya kembali.

ENABLE TRIGGER DeleteEmployee
ON Employee

Menghapus Trigger

Trigger yang ada dapat dihapus dengan DROP.

DROP TRIGGER [ IF EXISTS ] [schema_name.trigger_name [ ,...n ] [ ; ] 
  • Misalnya, menghapus dbo.trigger1dan dbo.trigger2.
DROP TRIGGER dbo.trigger1, dbo.trigger2;
  • Jika trigger yang akan dihapus tidak ada, pesan berikut akan muncul.
Msg 3701, Level 11, State 5, Line 1
Cannot drop the trigger 'dbo.trigger1', because it does not exist or you do not have permission.
Msg 3701, Level 11, State 5, Line 1
Cannot drop the trigger 'dbo.trigger2', because it does not exist or you do not have permission.
  • Tambahkan IF EXISTSuntuk menghilangkan pesan kesalahan.
DROP TRIGGER IF EXISTS dbo.trigger1, dbo.trigger2;

Penutup

Trigger DML dapat diatur untuk menjalankan serangkaian tindakan tertentu saat baris dimasukkan, diperbarui, atau dihapus dari tabel di basis data. Trigger dapat didefinisikan sebagai eksekusi sebelum atau sesudah suatu peristiwa. Anda juga dapat mengubah, menonaktifkan, mengaktifkan, dan menghapus trigger.

--

--

M. Ramadhan
Telematika

I’m a database designer and developer, childhood in Menggala, living in Palembang.