SQL Academy · Pelajaran

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.

Pelajaran 2 daripada 413 langkah

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?

Percuma untuk bermula

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

  1. Paparan Biasa: Guna Semula Secara Logik
  2. Paparan Boleh Dikemas Kini dan Pencetus INSTEAD OF
  3. Paparan Terwujud dan Strategi REFRESH
  4. Bila Perlu Pra-Agregat
← Kembali ke SQL Academy