Pemicu SQL: Panduan Penting
Diterbitkan: 2022-10-12Pemicu adalah entitas database di SQL Server. Secara teknis, mereka adalah kelas panggilan fungsi tertentu yang merespons operasi database tertentu.
Panduan penting ini akan memberi Anda informasi mendalam tentang Pemicu SQL yang bisa sangat berguna dalam profesi Anda. Mari kita mulai!
Apa itu Pemicu SQL?
Kata "pemicu" menggambarkan pernyataan bahwa server secara otomatis mengeksekusi kueri setiap kali konten dalam database diubah.
Pemicu adalah sekelompok kueri SQL bernama khusus yang disimpan di ruang memori. Ini adalah jenis panggilan fungsi tertentu yang segera dipanggil setiap kali ada peristiwa database terjadi. Setiap pemicu memiliki tabel yang ditetapkan untuk itu.

Misalnya, pemicu dapat diaktifkan setiap kali kolom baru ditambahkan ke tabel tertentu atau jika catatan tertentu diubah.
Menurut Jaringan Pengembang Microsoft, pemicu adalah kelas prosedur tersimpan tertentu. Dalam pernyataan pemicu, kami awalnya menentukan kapan pemicu harus dijalankan, dan kemudian kami memberikan tindakan yang harus diambil setelah pemicu diaktifkan.
Sintaksis:
CREATE TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE ON tableName FOR EACH ROW SET operation [trigger_body];
Penjelasan dari setiap parameter
- CREATE TRIGGER trigger_name – Digunakan untuk membuat trigger atau mengubah nama trigger yang ada.
- BEFORE/AFTER – Query ini digunakan untuk menentukan waktu eksekusi trigger (sebelum atau sesudah event tertentu).
- INSERT/UPDATE/DELETE – Ini menjelaskan tindakan yang ingin kita lakukan pada tabel.
- ON tableName – Di sini, kami mendefinisikan nama tabel untuk menyiapkan pemicu.
- UNTUK SETIAP ROW – Pernyataan ini berkaitan dengan pemicu baris, artinya pemicu akan dieksekusi setiap kali baris diubah.
- trigger_body – Ini menentukan tindakan yang akan diambil saat pemicu diaktifkan.
Pemicu adalah fungsi yang disimpan dengan identitas khusus yang memungkinkan kita untuk menggunakan kembali kueri yang telah dijalankan dan disimpan dengan aman di memori. Sekarang mari kita coba memahami mengapa SQL membutuhkannya.
Pemicu sebagian besar digunakan untuk mengatur penyebaran kode setiap kali suatu peristiwa terjadi. Dengan kata lain, menggunakan pemicu adalah pilihan ideal jika Anda memerlukan fragmen kode tertentu untuk terus dijalankan sebagai respons terhadap peristiwa tertentu.
Berikut ini adalah beberapa manfaat menggunakan pemicu dalam operasi database SQL.
- Melakukan pemeriksaan tambahan saat memasukkan, memperbarui, atau menghapus data dari tabel yang terpengaruh.
- Mengurangi waktu respons, yang membantu meningkatkan biaya komputasi.
- Mengaktifkan pengkodean parameter default canggih yang tidak dapat diakses oleh kendala awal.
Integritas referensial adalah properti inti utama dari sistem basis data relasional. Ini menandakan bahwa data yang disimpan dalam sistem basis data harus selalu akurat untuk setiap transaksi dan setiap operasi.
Jika dua tabel terletak di database atau sistem yang terpisah, tidak ada cara untuk memastikan validasi data di dalamnya menggunakan nilai batasan. Dalam situasi seperti itu, pemicu adalah satu-satunya pilihan untuk dieksekusi.
Kombinasi Argumen Pemicu

Untuk setiap tabel, kita dapat menentukan enam jenis pemicu yang berbeda. Ini adalah kombinasi dari argumen Pemicu yang disertakan dalam Pemicu tingkat baris SQL.
BEFORE INSERT : Pemicu ini menjalankan tindakan pada baris sebelum melakukan operasi INSERT apa pun di tabel yang ditentukan atau di database.
AFTER INSERT : Ini mengeksekusi tindakan pada baris segera setelah aktivitas INSERT database apa pun.
SEBELUM UPDATE : Dengan pemicu ini, fungsi pada baris dilakukan sebelum tindakan UPDATE dilakukan pada database.
SETELAH UPDATE : Ini mengeksekusi tindakan pada baris segera setelah database atau aktivitas UPDATE tabel tertentu.
SEBELUM DELETE : Ini mengeksekusi operasi tertentu pada baris bahkan sebelum database atau tabel dikenai tindakan DELETE.
AFTER DELETE : Pemicu ini menjalankan tindakan pada baris setelah setiap transaksi DELETE.
Jenis Pemicu SQL

Pemicu SQL adalah fungsi tersimpan yang langsung berjalan saat peristiwa tertentu terjadi. Ini menyerupai penjadwalan yang digerakkan oleh peristiwa. Situasi selanjutnya dapat memulai eksekusi pemicu.
Pemicu DML – DML adalah singkatan dari Data Manipulation Language. Eksekusi kode sebagai reaksi terhadap modifikasi data dimungkinkan menggunakan Pemicu DML. Pemicu ini diaktifkan ketika perintah DML seperti INSERT, UPDATE, dan DELETE dijalankan. Ini juga disebut "Pemicu Level Tabel".
Pemicu DDL – DDL adalah singkatan dari Data Definition Language. Pemicu DDL memungkinkan kita untuk menjalankan kode sebagai reaksi terhadap perubahan skema basis data, seperti menambah atau menghapus tabel, atau peristiwa server, seperti saat pengguna melakukan check-in. Ini disebut “Pemicu Tingkat Basis Data”.
Pemicu ini dapat diaktifkan, Ketika pernyataan DDL tertentu seperti CREATE, ALTER, atau DROP dieksekusi di database aktif. Ini juga dapat dimanfaatkan untuk mengawasi dan mengatur kegiatan yang dijalankan.
Pemicu LOGON – Setiap kali ada peristiwa LOGON (Startup, login, Logout, shutdown) terjadi, Pemicu Logon segera dipanggil. Mereka hanya dilakukan setelah proses otentikasi pengguna bahkan sebelum transaksi pengguna dimulai. Pemicu LOGON tidak akan dipicu jika otorisasi gagal.
Pemicu ini dapat digunakan untuk merekam riwayat login atau membuat pembatasan aktivitas untuk login tertentu, di antara fungsi audit dan manajemen identitas lainnya untuk koneksi server.
Pemicu CLR – CLR adalah singkatan dari Common Language Runtime. Pemicu CLR memang merupakan subset unik dari pemicu yang sebagian besar dibangun di atas CLR dalam teknologi .NET. Pemicu ini berguna jika pemicu perlu melakukan banyak perhitungan atau perlu berhubungan dengan entitas selain SQL.
Pemicu DML dan DDL memang dapat dibuat dengan mengaktifkan pengkodean pemicu CLR yang didukung dalam teknologi .NET termasuk Visual Basic, C#, dan F-sharp.
Contoh Pemicu SQL Server

Mari kita pahami konsep pemicu ini dengan sebuah contoh.
Pertama, mari kita buat database menggunakan pernyataan SQL.
CREATE DATABASE testdb; use testdb;
Di sini, saya telah memberikan "testdb" sebagai nama database. Dan langkah selanjutnya adalah membuat tabel.
CREATE TABLE student( name varchar(25), id int(2), maths int(2), physics int(2), biology int(2), social int(2), total int(2) );
Saya telah membuat tabel untuk menyimpan data siswa. Dan berikut adalah perintah untuk menggambarkan struktur tabel. Di sini "mahasiswa" adalah nama tabel yang saya berikan.

DESC student;
Di bawah ini adalah struktur tabel yang telah saya buat.
+---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(25) | YES | | NULL | | | id | int | YES | | NULL | | | maths | int | YES | | NULL | | | physics | int | YES | | NULL | | | biology | int | YES | | NULL | | | social | int | YES | | NULL | | | total | int | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 7 rows in set (0.00 sec)
Setelah membuat tabel, langkah selanjutnya adalah menyiapkan pemicu. Mari kita coba menggunakan argumen BEFORE INSERT .
Nama pemicu yang saya buat adalah "tanda". Segera setelah tabel diubah dengan nilai siswa, pemicu di bawah ini mencoba menentukan nilai keseluruhan siswa secara otomatis.
CREATE TRIGGER marks BEFORE INSERT ON student FOR EACH ROW set new.total=new.maths+new.physics+new.biology+new.social;
Karena kami diminta untuk mengganti data baris daripada bekerja dengan yang lama, kami telah mendefinisikan "total" menggunakan nama kelas baru, dan semua ekspresi berikutnya diawali dengan kata kunci baru setelah total menggunakan operator titik. Sekarang, kita akan menambahkan nilai ke setiap baris dan melihat hasilnya. Awalnya, nilai totalnya adalah 0 untuk setiap siswa.
INSERT INTO student VALUES("George",02,99,87,92,91,0); INSERT INTO student VALUES("James",03,91,81,94,90,0); INSERT INTO student VALUES("Harry",04,86,70,73,88,0); INSERT INTO student VALUES("John",05,73,89,78,92,0); INSERT INTO student VALUES("Lisa",01,94,75,69,79,0);
Pernyataan pemicu akan secara otomatis dipicu ketika data dimasukkan ke dalam tabel siswa dalam kasus ini. Nilai total setiap siswa akan dihitung oleh pemicu. Sekarang, mari kita lihat apakah pemicu dipanggil atau tidak menggunakan pernyataan SELECT .
SELECT * FROM table_name;
Dan inilah hasil akhirnya.
mysql> select * from student; +--------+------+-------+---------+---------+--------+-------+ | name | id | maths | physics | biology | social | total | +--------+------+-------+---------+---------+--------+-------+ | George | 2 | 91 | 81 | 94 | 90 | 356 | | James | 3 | 86 | 70 | 73 | 88 | 317 | | Harry | 4 | 73 | 89 | 78 | 92 | 332 | | John | 5 | 94 | 75 | 69 | 79 | 317 | | Lisa | 1 | 99 | 87 | 92 | 91 | 369 | +--------+------+-------+---------+---------+--------+-------+ 5 rows in set (0.00 sec)
Pada hasil di atas, Anda dapat melihat bahwa semua nilai mata pelajaran ditambahkan secara otomatis untuk setiap siswa. Jadi, kita dapat menyimpulkan bahwa pemicu berhasil dipanggil.
Operasi Pemicu Tambahan
Kita dapat melakukan banyak operasi menggunakan pemicu. Beberapa mungkin sederhana dan beberapa mungkin sedikit rumit, tetapi begitu kita menelusuri kueri, itu akan mudah dipahami. Dengan menggunakan pernyataan Transact-SQL, Anda dapat mengaktifkan, menonaktifkan, atau menghapus pemicu menggunakan perintah berikut.
Permintaan untuk memeriksa apakah Pemicu tertentu ada atau tidak
Perintah ini memeriksa pemicu yang ditentukan di seluruh database.
SELECT * FROM [sys].[triggers] WHERE [name] = 'Trigger_name'
Permintaan untuk menampilkan pemicu
Semua pemicu yang tersedia di database aktif akan ditampilkan oleh pernyataan berikut.
SHOW TRIGGERS;
Permintaan untuk Menonaktifkan Pemicu
Perintah di bawah ini menonaktifkan pemicu di database yang berfungsi.
DISABLE TRIGGER trigger_name ON DATABASE;
Anda juga dapat menentukan nama tabel tertentu untuk menonaktifkan pemicu.
DISABLE TRIGGER trigger_name ON table_name;
Permintaan untuk Mengaktifkan Pemicu
Perintah berikut pertama-tama menonaktifkan pemicu tertentu yang ditentukan pada tabel yang ditentukan dalam database aktif sebelum mengaktifkannya kembali.
ALTER TABLE table_name DISABLE TRIGGER trigger_name ALTER TABLE table_name ENABLE TRIGGER trigger_name
Pemicu harus dinonaktifkan, sebelum mencoba mengaktifkannya,
Permintaan untuk mengaktifkan atau menonaktifkan semua pemicu dalam tabel
Dengan menggunakan pernyataan SQL di atas, kita dapat menonaktifkan atau mengaktifkan semua pemicu tabel sekaligus dengan mengganti "ALL" sebagai pengganti nama pemicu tertentu.
ALTER TABLE table_name DISABLE TRIGGER ALL ALTER TABLE table_name ENABLE TRIGGER ALL
Permintaan untuk Menghapus atau Menjatuhkan Pemicu
Pemicu dapat dihilangkan dengan menghapusnya atau seluruh tabel. Setiap pemicu terkait juga dihapus saat tabel dihapus.
DROP TRIGGER [trigger_name];
Setiap kali pemicu dihapus, data terkait dihilangkan dari tabel data sys.objects.
Keuntungan dari Pemicu
- Sangat mudah untuk membangun pemicu dan pemicu itu sendiri dapat memanggil fungsi dan metode yang tersimpan.
- Pengguna dapat menerapkan audit sederhana menggunakan pemicu.
- Tragisnya, Anda tidak dapat membuat batasan di seluruh entitas dalam sistem database dengan SQL Server, meskipun Anda dapat meniru operasi batasan dengan memanfaatkan pemicu.
- Batasan integritas dapat diimplementasikan di seluruh basis data menggunakan pemicu.
- Ketika validasi grup diperlukan daripada verifikasi baris demi baris dari data yang baru dimasukkan atau diubah, pemicu dapat membantu.
Kekurangan Pemicu
Pemicu SQL mungkin bukan pilihan terbaik dalam beberapa situasi karena keterbatasannya.
- Pemicu harus didokumentasikan secara akurat.
- Karena eksekusi database simultan yang mungkin tidak dapat diakses oleh komponen aplikasi, pemicu bisa jadi sulit untuk di-debug.
- Pernyataan DML menjadi lebih kompleks ketika pemicu digunakan.
- Bahkan masalah pemicu kecil berpotensi menyebabkan kesalahan logis dalam pernyataan tersebut.
Kesimpulan
Pemicu adalah komponen Transact-SQL dan SQL yang sangat membantu, dan Anda juga dapat menggunakannya di Oracle. Penggunaan pemicu sangat penting saat memanggil metode tersimpan. Pemicu SQL ini memungkinkan kami untuk menganalisis jadwal aktivitas dan menentukan cara meresponsnya jika perlu. Kami juga dapat memeriksa tabel tertentu yang terhubung ke pemicu untuk memperoleh data.
Rekursi dapat diaktifkan oleh pemicu. Setiap kali pemicu di tabel mengeksekusi perintah di tabel induk, iterasi kedua pemicu dimatikan, dan ini dikenal sebagai pemicu rekursif. Ini membantu ketika mencoba memecahkan korelasi identitas.
Selain itu, pemicu mengatur pola pembaruan yang diizinkan untuk diterima oleh database. Sangat bermanfaat untuk menjaga batasan integritas data dalam sistem database jika kunci batasan SQL tidak ada terutama kunci utama dan kunci asing.
Saya harap Anda menemukan artikel ini membantu dalam mempelajari tentang Pemicu SQL.
Jika Anda ingin mempelajari database secara mendalam, berikut adalah beberapa sumber yang bagus untuk mempelajari SQL dan NoSQL.