SQLite - Pemicu

SQLite Triggersadalah fungsi callback database, yang secara otomatis dijalankan / dipanggil saat peristiwa database tertentu terjadi. Berikut adalah poin penting tentang pemicu SQLite -

  • Pemicu SQLite dapat ditentukan untuk diaktifkan setiap kali DELETE, INSERT atau UPDATE dari tabel database tertentu terjadi atau setiap kali UPDATE terjadi pada satu atau beberapa kolom tertentu dari sebuah tabel.

  • Saat ini, SQLite hanya mendukung pemicu UNTUK SETIAP ROW, bukan pemicu UNTUK SETIAP PERNYATAAN. Karenanya, menetapkan secara eksplisit UNTUK SETIAP BARIS adalah opsional.

  • Baik klausa WHEN dan tindakan pemicu dapat mengakses elemen baris yang sedang disisipkan, dihapus, atau diperbarui menggunakan referensi formulir NEW.column-name dan OLD.column-name, dengan nama kolom adalah nama kolom dari tabel yang terkait dengan pemicu.

  • Jika klausa WHEN diberikan, pernyataan SQL yang ditentukan hanya dieksekusi untuk baris yang klausa WHEN benar. Jika tidak ada klausa WHEN yang diberikan, pernyataan SQL dijalankan untuk semua baris.

  • Kata kunci BEFORE atau AFTER menentukan kapan tindakan pemicu akan dijalankan relatif terhadap penyisipan, modifikasi, atau penghapusan baris terkait.

  • Pemicu secara otomatis dihilangkan saat tabel yang terkait dengan dijatuhkan.

  • Tabel yang akan dimodifikasi harus ada dalam database yang sama dengan tabel atau tampilan tempat pemicu dilampirkan dan harus digunakan saja tablename tidak database.tablename.

  • Fungsi SQL khusus RAISE () dapat digunakan dalam program pemicu untuk memunculkan pengecualian.

Sintaksis

Berikut ini adalah sintaks dasar pembuatan file trigger.

CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name 
ON table_name
BEGIN
 -- Trigger logic goes here....
END;

Sini, event_namebisa berupa operasi database INSERT, DELETE, dan UPDATE pada tabel yang disebutkantable_name. Anda secara opsional dapat menentukan UNTUK SETIAP BARIS setelah nama tabel.

Berikut ini adalah sintaks untuk membuat pemicu pada operasi UPDATE pada satu atau beberapa kolom tertentu dari sebuah tabel.

CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name 
ON table_name
BEGIN
   -- Trigger logic goes here....
END;

Contoh

Mari kita pertimbangkan sebuah kasus di mana kita ingin menyimpan uji coba audit untuk setiap catatan yang dimasukkan ke dalam tabel PERUSAHAAN, yang baru kita buat sebagai berikut (Hapus tabel PERUSAHAAN jika Anda sudah memilikinya).

sqlite> CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Untuk mempertahankan uji coba audit, kami akan membuat tabel baru bernama AUDIT di mana pesan log akan disisipkan, setiap kali ada entri dalam tabel PERUSAHAAN untuk catatan baru.

sqlite> CREATE TABLE AUDIT(
   EMP_ID INT NOT NULL,
   ENTRY_DATE TEXT NOT NULL
);

Di sini, ID adalah ID record AUDIT, dan EMP_ID adalah ID yang akan berasal dari tabel COMPANY dan DATE akan menyimpan stempel waktu kapan record akan dibuat di tabel COMPANY. Sekarang mari buat pemicu pada tabel PERUSAHAAN sebagai berikut -

sqlite> CREATE TRIGGER audit_log AFTER INSERT 
ON COMPANY
BEGIN
   INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;

Sekarang, kita akan memulai pekerjaan yang sebenarnya, Mari mulai memasukkan catatan ke dalam tabel PERUSAHAAN yang seharusnya menghasilkan catatan log audit di tabel AUDIT. Buat satu record dalam tabel COMPANY sebagai berikut -

sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

Ini akan membuat satu record dalam tabel COMPANY, yaitu sebagai berikut -

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0

Pada waktu yang sama, satu record akan dibuat dalam tabel AUDIT. Record ini adalah hasil dari sebuah trigger, yang telah kita buat pada operasi INSERT di tabel COMPANY. Demikian pula, Anda dapat membuat pemicu pada operasi UPDATE dan DELETE berdasarkan kebutuhan Anda.

EMP_ID      ENTRY_DATE
----------  -------------------
1           2013-04-05 06:26:00

Daftar Pemicu

Anda dapat mencantumkan semua pemicu dari sqlite_master tabel sebagai berikut -

sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger';

Pernyataan SQLite di atas hanya akan mencantumkan satu entri sebagai berikut -

name
----------
audit_log

Jika Anda ingin membuat daftar pemicu pada tabel tertentu, gunakan klausa AND dengan nama tabel sebagai berikut -

sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger' AND tbl_name = 'COMPANY';

Pernyataan SQLite di atas juga akan mencantumkan hanya satu entri sebagai berikut -

name
----------
audit_log

Menjatuhkan Pemicu

Berikut adalah perintah DROP, yang dapat digunakan untuk menjatuhkan pemicu yang ada.

sqlite> DROP TRIGGER trigger_name;