SQL Academy · Pelajaran

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

Pelajaran 2 dari 413 langkah

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?

Gratis untuk memulai

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

  1. VIEW Biasa: Penggunaan Ulang Logis
  2. VIEW yang Dapat Diperbarui dan Pemicu INSTEAD OF
  3. VIEW MATERIALIZED dan Strategi REFRESH
  4. Kapan Melakukan Agregasi Awal
← Kembali ke SQL Academy