VIEW yang Dapat Diperbarui dan Pemicu INSTEAD OF
Jadikan VIEW dapat diperbarui secara langsung, atau gunakan pemicu INSTEAD OF saat VIEW mengagregasi atau menggabungkan data
VIEW yang Dapat Diperbarui dan Pemicu INSTEAD OF adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Tampilan yang Dapat Diperbarui Otomatis
PostgreSQL secara otomatis membuat tampilan sederhana dapat diperbarui. INSERT/UPDATE/DELETE pada tampilan ditulis ulang menjadi operasi yang sama pada tabel dasar:
CREATE VIEW active_users AS
SELECT id, email, full_name FROM users WHERE deleted_at IS NULL;
UPDATE active_users SET full_name = 'Alice' WHERE id = 1;
-- Translates to UPDATE on the users table.Persyaratan untuk Pembaruan Otomatis
Tampilan harus:
- Mereferensikan tepat ONE tabel dasar
- Tidak memiliki agregasi, GROUP BY, HAVING, DISTINCT
- Tidak memiliki LIMIT, OFFSET
- Tidak memiliki operasi himpunan (UNION dan sebagainya)
- Memetakan kolom secara langsung (tanpa ekspresi dalam daftar SELECT — atau hanya beberapa)
WITH CHECK OPTION
Larang penulisan yang akan membuat baris tidak terlihat oleh tampilan:
CREATE VIEW active_users AS
SELECT * FROM users WHERE deleted_at IS NULL
WITH CHECK OPTION;
INSERT INTO active_users (email, deleted_at) VALUES (..., NOW());
-- ERROR — would create a row outside the view's WHERE.Tampilan Kompleks Memerlukan INSTEAD OF
Tampilan dengan gabungan, agregasi, atau ekspresi tidak dapat diperbarui secara otomatis. Anda harus menulis pemicu INSTEAD OF yang menentukan arti penulisan:
CREATE VIEW user_with_address AS
SELECT u.id, u.email, a.city, a.country
FROM users u JOIN addresses a ON a.user_id = u.id;
CREATE TRIGGER user_addr_update
INSTEAD OF UPDATE ON user_with_address
FOR EACH ROW EXECUTE FUNCTION update_user_addr();Fungsi Pemicu INSTEAD OF
Fungsi tersebut menentukan tabel dasar mana yang harus ditulisi:
CREATE FUNCTION update_user_addr() RETURNS TRIGGER AS $$
BEGIN
UPDATE users SET email = NEW.email WHERE id = NEW.id;
UPDATE addresses SET city = NEW.city, country = NEW.country WHERE user_id = NEW.id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;Saat INSTEAD OF Lebih Baik daripada Logika Aplikasi
Jika banyak konsumen memperbarui tampilan, memusatkan logika pembaruan dalam pemicu akan memberikan konsistensi. Jika hanya satu aplikasi yang melakukan pembaruan, pertahankan logikanya dalam kode aplikasi.
SECURITY BARRIER
Cegah perencana membocorkan predikat ke konsumen tampilan yang tidak tepercaya (kebocoran informasi melalui biaya):
CREATE VIEW my_things AS
SELECT * FROM things WHERE owner_id = current_user_id()
WITH (security_barrier);Keamanan Tingkat Baris sebagai Alternatif
PostgreSQL modern juga mendukung Row-Level Security (RLS) pada tabel dasar — sering kali lebih bersih daripada membangun tampilan keamanan.
ALTER TABLE things ENABLE ROW LEVEL SECURITY;
CREATE POLICY owner_only ON things USING (owner_id = current_user_id());Tampilan Rekursif
PostgreSQL mendukung tampilan rekursif (hierarki yang dapat Anda kueri dengan SELECT):
CREATE RECURSIVE VIEW tree (id, parent_id, depth) AS
SELECT id, parent_id, 0 FROM nodes WHERE parent_id IS NULL
UNION ALL
SELECT n.id, n.parent_id, t.depth + 1
FROM nodes n JOIN tree t ON n.parent_id = t.id;Izin
Berikan izin pada tampilan, bukan pada tabel dasar:
GRANT SELECT, UPDATE ON active_users TO app_user;Catatan Performa
Pemicu INSTEAD OF dijalankan untuk setiap baris. Untuk DML massal, ini lambat. Sering kali lebih baik jika pemanggil menulis langsung ke tabel dasar.
Ringkasan
Tampilan dapat ditulisi.
- Tampilan sederhana: dapat diperbarui otomatis
- Tampilan kompleks: pemicu INSTEAD OF
- WITH CHECK OPTION memberlakukan visibilitas
- RLS sering kali merupakan model keamanan yang lebih bersih
Cek Cepat
Anda mendefinisikan tampilan yang menggabungkan dua tabel. Apakah Anda dapat melakukan UPDATE melaluinya secara default?
Belajar SQL dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 46
- Pelajaran
- 183
Pertanyaan yang Sering Diajukan
Apakah pelajaran “VIEW yang Dapat Diperbarui dan Pemicu INSTEAD OF” gratis?
Ya — teks lengkap “VIEW yang Dapat Diperbarui dan Pemicu INSTEAD OF” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “VIEW yang Dapat Diperbarui dan Pemicu INSTEAD OF”?
Jadikan VIEW dapat diperbarui secara langsung, atau gunakan pemicu INSTEAD OF saat VIEW mengagregasi atau menggabungkan data Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “VIEW yang Dapat Diperbarui dan Pemicu INSTEAD OF” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- VIEW Biasa: Penggunaan Ulang Logis
- VIEW yang Dapat Diperbarui dan Pemicu INSTEAD OF
- VIEW MATERIALIZED dan Strategi REFRESH
- Kapan Melakukan Agregasi Awal