Paparan Boleh Dikemas Kini dan Pencetus INSTEAD OF
Jadikan paparan boleh dikemas kini secara langsung, atau gunakan pencetus INSTEAD OF apabila paparan mengagregat atau menggabungkan data.
Paparan Boleh Dikemas Kini dan Pencetus INSTEAD OF ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Paparan yang Dikemas Kini Secara Automatik
PostgreSQL menjadikan paparan mudah boleh dikemas kini secara automatik. INSERT/UPDATE/DELETE pada paparan ditulis semula sebagai operasi yang sama pada jadual asas:
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.Keperluan untuk Kemas Kini Automatik
Paparan mestilah:
- Merujuk tepat kepada SATU jadual asas
- Tiada agregat, GROUP BY, HAVING atau DISTINCT
- Tiada LIMIT atau OFFSET
- Tiada operasi himpunan (UNION dan sebagainya)
- Memetakan lajur secara terus (tiada ungkapan dalam senarai SELECT — atau hanya sebahagian)
WITH CHECK OPTION
Larangkan penulisan yang akan mencipta baris yang tidak kelihatan dalam paparan:
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.Paparan Kompleks Memerlukan INSTEAD OF
Paparan yang mempunyai gabungan, agregat atau ungkapan tidak boleh dikemas kini secara automatik. Anda mesti menulis pencetus INSTEAD OF yang mentakrifkan maksud operasi tulis:
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 Pencetus INSTEAD OF
Fungsi ini menentukan jadual asas yang hendak ditulis:
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;Bila INSTEAD OF Mengatasi Logik Aplikasi
Jika banyak pengguna mengemas kini paparan, memusatkan logik kemas kini dalam pencetus memberikan ketekalan. Jika hanya satu aplikasi yang mengemas kini, kekalkan logik itu dalam kod aplikasi.
SECURITY BARRIER
Halang perancang daripada membocorkan predikat kepada pengguna paparan yang tidak dipercayai (kebocoran maklumat melalui kos):
CREATE VIEW my_things AS
SELECT * FROM things WHERE owner_id = current_user_id()
WITH (security_barrier);Keselamatan Tahap Baris sebagai Alternatif
PostgreSQL moden juga menyokong Row-Level Security (RLS) pada jadual asas — selalunya lebih kemas daripada membina paparan keselamatan.
ALTER TABLE things ENABLE ROW LEVEL SECURITY;
CREATE POLICY owner_only ON things USING (owner_id = current_user_id());Paparan Rekursif
PostgreSQL menyokong paparan rekursif (hierarki yang boleh anda gunakan SELECT terhadapnya):
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;Keizinan
Berikan keizinan pada paparan, bukan jadual asas:
GRANT SELECT, UPDATE ON active_users TO app_user;Nota Prestasi
Pencetus INSTEAD OF dicetuskan bagi setiap baris. Untuk DML pukal, ini perlahan. Selalunya lebih baik jika pemanggil menulis terus kepada jadual asas.
Kesimpulan
Paparan boleh ditulis.
- Paparan mudah: boleh dikemas kini secara automatik
- Paparan kompleks: pencetus INSTEAD OF
- WITH CHECK OPTION menguatkuasakan keterlihatan
- RLS selalunya merupakan model keselamatan yang lebih kemas
Semakan Pantas
Anda mentakrifkan paparan yang menggabungkan dua jadual. Bolehkah anda melakukan UPDATE melaluinya secara lalai?
Pelajari SQL dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 46
- Pelajaran
- 183
Soalan Lazim
Adakah pelajaran “Paparan Boleh Dikemas Kini dan Pencetus INSTEAD OF” percuma?
Ya — teks penuh “Paparan Boleh Dikemas Kini dan Pencetus INSTEAD OF” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Paparan Boleh Dikemas Kini dan Pencetus INSTEAD OF”?
Jadikan paparan boleh dikemas kini secara langsung, atau gunakan pencetus INSTEAD OF apabila paparan mengagregat atau menggabungkan data. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Paparan Boleh Dikemas Kini dan Pencetus INSTEAD OF” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Paparan Biasa: Guna Semula Secara Logik
- Paparan Boleh Dikemas Kini dan Pencetus INSTEAD OF
- Paparan Terwujud dan Strategi REFRESH
- Bila Perlu Pra-Agregat