SQLite - Triggers: A Friendly Guide for Beginners
Hai there, para pemula pemrograman! Hari ini, kita akan memulai perjalanan menarik ke dunia trigger SQLite. Jangan khawatir jika Anda belum pernah menulis baris kode sebelumnya - saya akan menjadi panduan ramah Anda, dan kita akan meng eksplorasi topik ini secara bertahap. Pada akhir panduan ini, Anda akan dapat membuat trigger seperti seorang ahli!
Apa Itu Trigger?
Sebelum kita masuk ke dalam, mari bayangkan Anda menjalankan sebuah perpustakaan kecil. Setiap kali buku dipinjam, Anda perlu memperbarui beberapa catatan: tandai buku itu tidak tersedia, catat tanggal peminjaman, dan mungkin bahkan mengirim email pengingat. Apakah itu tidak akan bagus jika semua tindakan ini dapat terjadi secara otomatis saat buku dipinjam? Itu tepat apa yang trigger lakukan dalam basis data!
Dalam SQLite, trigger adalah objek basis data yang secara otomatis dieksekusi saat terjadi peristiwa basis data yang ditentukan. Itu seperti menyetel efek domino - saat satu hal terjadi, itu secara otomatis menyebabkan hal lain terjadi.
Membuat Trigger Pertama Anda
Mari mulai dengan contoh sederhana. Bayangkan kita memiliki tabel yang disebut books
dalam basis data perpustakaan kami:
CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT,
author TEXT,
available INTEGER
);
Sekarang, mari kita buat trigger yang secara otomatis menetapkan buku itu tidak tersedia (0) saat dipinjam:
CREATE TRIGGER make_unavailable
AFTER INSERT ON borrowings
FOR EACH ROW
BEGIN
UPDATE books SET available = 0 WHERE id = NEW.book_id;
END;
mari kitauraikan ini:
-
CREATE TRIGGER make_unavailable
: Kita sedang membuat trigger baru bernama "make_unavailable". -
AFTER INSERT ON borrowings
: Trigger ini akan terbakar setelah baris baru dimasukkan ke dalam tabel "borrowings". -
FOR EACH ROW
: Trigger ini akan dieksekusi sekali untuk setiap baris yang terkena pengaruh oleh operasi INSERT. -
BEGIN ... END
: Blok ini berisi tindakan yang akan dilakukan trigger. -
UPDATE books SET available = 0 WHERE id = NEW.book_id
: Ini memperbarui tabel "books", menetapkan kolom "available" ke 0 untuk buku yang dipinjam.
Jenis Trigger
SQLite mendukung beberapa jenis trigger. Mari kita lihat mereka:
1. Trigger SEBELUM
Trigger ini terbakar sebelum operasi basis data terjadi. Mereka sangat cocok untuk memvalidasi atau memodifikasi data sebelum dimasukkan atau diperbarui.
CREATE TRIGGER check_author
BEFORE INSERT ON books
FOR EACH ROW
BEGIN
SELECT CASE
WHEN NEW.author IS NULL THEN
RAISE(ABORT, 'Author cannot be null')
END;
END;
Trigger ini memeriksa jika pengarang null sebelum memasukkan buku baru, dan meningkatkan kesalahan jika itu benar.
2. Trigger SESUDAH
Kami sudah melihat trigger SESUDAH dalam contoh pertama kita. Trigger ini terbakar setelah operasi basis data telah terjadi. Mereka sangat berguna untuk memelihara data terkait atau mencatat perubahan.
3. Trigger SEBAGAI GANTI
Trigger ini adalah trigger spesial yang hanya digunakan pada view. Mereka memungkinkan Anda menentukan perilaku khusus saat mencoba memodifikasi data melalui view.
CREATE VIEW available_books AS
SELECT * FROM books WHERE available = 1;
CREATE TRIGGER update_available_books
INSTEAD OF UPDATE ON available_books
FOR EACH ROW
BEGIN
UPDATE books SET
title = NEW.title,
author = NEW.author
WHERE id = OLD.id;
END;
Trigger ini memungkinkan pembaruan pada view "available_books", yang kemudian memperbarui tabel "books" yang mendasarinya.
Peristiwa Trigger
Trigger dapat diatur untuk terbakar pada berbagai peristiwa:
Peristiwa | Deskripsi |
---|---|
INSERT | Terbakar saat baris baru dimasukkan ke dalam tabel |
UPDATE | Terbakar saat baris dalam tabel diperbarui |
DELETE | Terbakar saat baris dihapus dari tabel |
Anda bahkan dapat menentukan beberapa peristiwa untuk trigger tunggal:
CREATE TRIGGER log_changes
AFTER INSERT OR UPDATE OR DELETE ON books
FOR EACH ROW
BEGIN
INSERT INTO log (action, book_id, timestamp)
VALUES (
CASE
WHEN NEW.id IS NOT NULL AND OLD.id IS NULL THEN 'INSERT'
WHEN NEW.id IS NULL AND OLD.id IS NOT NULL THEN 'DELETE'
ELSE 'UPDATE'
END,
COALESCE(NEW.id, OLD.id),
DATETIME('NOW')
);
END;
Trigger ini mencatat semua perubahan (penyisipan, pembaruan, dan penghapusan) ke tabel "books".
Mengelola Trigger
Sekarang kita sudah membuat beberapa trigger, Anda mungkin bertanya-tanya, "Bagaimana saya bisa melihat semua trigger dalam basis data saya?" Pertanyaan bagus! SQLite menyediakan cara mudah untuk daftar semua trigger:
SELECT name, sql FROM sqlite_master WHERE type = 'trigger';
Query ini akan menunjukkan nama semua trigger dan SQL yang digunakan untuk menciptakan mereka. Itu seperti melihat di belakang payung untuk melihat bagaimana magik itu berlangsung!
Menghapus Trigger
kadang-kadang, Anda mungkin perlu menghapus trigger. Mungkin itu tidak lagi diperlukan, atau Anda ingin menggantinya dengan yang lain. Menghapus trigger sangat mudah:
DROP TRIGGER IF EXISTS make_unavailable;
Perintah ini menghapus trigger "make_unavailable" yang kita buat sebelumnya. Klausul IF EXISTS
adalah jaringan keselamatan - itu mencegah kesalahan jika trigger tidak ada.
Kesimpulan
Selamat! Anda baru saja mengambil langkah pertama ke dunia trigger SQLite. Kita telah menyoroti membuat trigger, jenis trigger yang berbeda, peristiwa trigger, daftar trigger, dan bahkan bagaimana menghapus mereka.
Ingat, trigger adalah alat yang kuat yang dapat membuat basis data Anda bekerja cerdas, bukan keras. Mereka seperti para goblin kecil yang bekerja di belakang layar, menjaga data Anda konsisten dan terupdate.
Sekarang Anda teruskan perjalanan Anda dalam pemrograman, Anda akan menemukan lebih banyak penggunaan untuk trigger. Mereka mungkin terlihat sedikit sulit pada awalnya, tapi dengan latihan, Anda akan dapat membuat sistem trigger kompleks yang membuat basis data Anda berdansa!
Terus mencoba, terus belajar, dan terutama, bersenang-senang! Dunia basis data luas dan menarik, dan Anda baru saja menggores permukaannya. Siapa tahu apa saja hal menarik yang Anda akan buat berikutnya?
Credits: Image by storyset