Pencetus SQLite
Pencetus SQLite ialah fungsi panggil balik pangkalan data, yang akan secara automatik melaksanakan/panggilan apabila peristiwa pangkalan data yang ditentukan berlaku. Berikut ialah perkara utama tentang pencetus SQLite: SQLite Trigger (Pencetus) ialah fungsi panggil balik pangkalan data, yang akan dilaksanakan/dipanggil secara automatik apabila peristiwa pangkalan data yang ditentukan berlaku. Berikut ialah perkara utama tentang pencetus SQLite:
Pencetus SQLite boleh ditentukan untuk mencetuskan apabila DELETE, INSERT atau UPDATE berlaku dalam jadual pangkalan data tertentu atau apabila Menyala apabila satu atau lebih lajur jadual yang ditentukan dikemas kini.
SQLite hanya menyokong UNTUK SETIAP ROW pencetus (Pencetus), bukan UNTUK SETIAP PERNYATAAN pencetus (Pencetus). Oleh itu, menyatakan secara eksplisit UNTUK SETIAP ROW adalah pilihan.
BILA fasal dan tindakan pencetus boleh diakses menggunakan borang NEW.column-name dan OLD.column-name Rujukan yang disisipkan, dipadamkan, atau elemen baris yang dikemas kini, dengan nama lajur ialah nama lajur daripada jadual yang dikaitkan dengan pencetus.
Jika klausa WHEN disediakan, pernyataan SQL dilaksanakan hanya untuk baris yang ditentukan yang mana klausa WHEN adalah benar. Jika tiada klausa WHEN disediakan, pernyataan SQL dilaksanakan untuk semua baris.
Kata kunci SEBELUM atau SELEPAS menentukan apabila tindakan pencetus dilaksanakan, sama ada sebelum atau selepas sisipan, pengubahsuaian atau pemadaman baris yang berkaitan.
Apabila jadual yang dikaitkan dengan pencetus dipadamkan, pencetus (Pencetus) dipadamkan secara automatik.
Jadual yang akan diubah suai mesti wujud dalam pangkalan data yang sama dengan jadual atau paparan yang pencetus dilampirkan dan hanya nama jadual mesti digunakan, bukan pangkalan data.nama jadual.
Fungsi SQL khas RAISE() boleh digunakan untuk mencetuskan pengecualian yang dilemparkan dalam atur cara.
Sintaks
Sintaks asas untuk mencipta pencetus (Pencetus) adalah seperti berikut:
PADA table_name
BEGIN
--- Logik pencetus pergi ke sini....
END;
Di sini, event_name boleh INSERT, DELETE and UPDATE operasi pangkalan data pada jadual yang disebut table_name. Anda boleh secara pilihan menentukan UNTUK SETIAP BARIS selepas nama jadual.
Berikut ialah sintaks untuk mencipta pencetus (Pencetus) pada satu atau lebih lajur jadual tertentu pada operasi KEMASKINI:
ON table_name
BEGIN
-- Logik pencetus pergi ke sini....
END;
Contoh
Mari kita anggap situasi di mana kita ingin mengekalkan ujian audit untuk setiap rekod yang dimasukkan ke dalam jadual SYARIKAT yang baru dibuat (atau padam dan buat semula jika ia sudah wujud):
ID INT KUNCI UTAMA BUKAN NULL,
NAMA TEKS BUKAN NULL,
UMUR INT BUKAN NULL,
ALAMAT CHAR(50),
GAJI
);
Untuk memastikan pengauditan percubaan, kami akan mencipta jadual baharu yang dipanggil AUDIT. Setiap kali terdapat item rekod baharu dalam jadual SYARIKAT, mesej log akan dimasukkan ke dalamnya:
EMP_ID INT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);
Di sini, ID ialah ID rekod AUDIT, EMP_ID ialah ID daripada jadual SYARIKAT dan DATE akan memegang cap masa apabila rekod dalam SYARIKAT dicipta. Jadi, sekarang mari kita buat pencetus pada jadual SYARIKAT seperti berikut: EMP_ID, ENTRY_DATE) NILAI (new.ID, datetime('now'));
END;Sekarang, kami akan mula memasukkan rekod dalam jadual SYARIKAT, yang akan menghasilkan jadual AUDIT Cipta rekod log audit dalam . Jadi, mari buat rekod dalam jadual SYARIKAT seperti berikut:
sqlite> MASUKKAN KE DALAM SYARIKAT (ID,NAMA,UMUR,ALAMAT,GAJI)
NAMA ID UMUR ALAMAT GAJI
Pada masa yang sama, rekod akan dibuat dalam jadual AUDIT. Rekod ini adalah hasil daripada pencetus yang kami buat pada jadual SYARIKAT pada operasi INSERT. Begitu juga, pencetus boleh dibuat pada operasi KEMASKINI dan PADAM mengikut keperluan.
---------- -------------------
1 2013-04 -05 06:26:00
Senaraikan pencetus (PENCETUS)
Anda boleh menyenaraikan semua pencetus daripada jadual sqlite_master seperti yang ditunjukkan di bawah :
WHERE type = 'trigger';
Pernyataan SQLite di atas hanya akan menyenaraikan satu entri, seperti berikut:
----------
audit_log
Gunakan DAN jika anda ingin menyenaraikan pencetus pada jadual tertentu Klausa menyambungkan nama jadual seperti berikut:
WHERE type = 'trigger' AND tbl_name = 'COMPANY';
Pernyataan SQLite di atas hanya akan menyenaraikan satu entri, seperti berikut:
----------
audit_log
Padamkan Pencetus (PENCETUS)
Berikut ialah arahan DROP, yang boleh digunakan untuk memadamkan pencetus sedia ada: