SQL Academy · Pelajaran

Anatomi Pencetus: BEFORE/AFTER, FOR EACH ROW

Fahami masa pencetus, kegranularan (baris berbanding pernyataan), serta maksud NEW dan OLD dalam fungsi pencetus.

Pelajaran 1 daripada 414 langkah

Anatomi Pencetus: BEFORE/AFTER, FOR EACH ROW ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 1 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.

Apakah Pencetus

Pencetus ialah fungsi yang dipanggil secara automatik oleh pangkalan data sebelum atau selepas INSERT, UPDATE, DELETE, atau TRUNCATE pada jadual.

Dua Bahagian: Fungsi + Pencetus

Anda menulis fungsi yang mengembalikan trigger, kemudian melampirkannya pada jadual:

CREATE OR REPLACE FUNCTION set_updated_at()
RETURNS TRIGGER AS $$
BEGIN
  NEW.updated_at := NOW();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_set_updated_at
BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION set_updated_at();

BEFORE berbanding AFTER

  • BEFORE — dicetuskan sebelum baris ditulis; boleh mengubah NEW
  • AFTER — dicetuskan selepas penulisan; untuk kesan sampingan (audit, pemberitahuan)

FOR EACH ROW berbanding FOR EACH STATEMENT

  • FOR EACH ROW — berjalan sekali bagi setiap baris yang terjejas; NEW dan OLD tersedia
  • FOR EACH STATEMENT — berjalan sekali bagi setiap pernyataan, tanpa akses kepada baris tertentu

NEW dan OLD

Di dalam pencetus baris:

  • NEW — baris baharu (INSERT, UPDATE)
  • OLD — baris sebelumnya (UPDATE, DELETE)

Nilai Pulangan Penting

Untuk pencetus baris BEFORE:

  • Pulangkan NEW untuk meneruskan baris itu
  • Pulangkan NEW yang telah diubah untuk menukar perkara yang disimpan
  • Pulangkan NULL untuk membatalkan operasi bagi baris itu

Penapis WHEN

Pencetusan bersyarat:

CREATE TRIGGER trg_log_status
AFTER UPDATE OF status ON orders
FOR EACH ROW WHEN (OLD.status IS DISTINCT FROM NEW.status)
EXECUTE FUNCTION log_status_change();

OF lajur

BEFORE/AFTER UPDATE boleh dicetuskan hanya apabila lajur tertentu berubah:

CREATE TRIGGER ... AFTER UPDATE OF status ON orders ...

Berbilang Pencetus

Pencetus dicetuskan mengikut susunan abjad berdasarkan nama pencetus. Gunakan awalan (00_, 10_, ...) untuk mengawal susunan.

Prestasi Pencetus

Pencetus baris dicetuskan bagi setiap baris — logik berat dalam pencetus baris × DML yang besar = perlahan. Utamakan pencetus pernyataan untuk kesan sampingan pukal.

Melumpuhkan Pencetus

Langkau buat sementara:

ALTER TABLE orders DISABLE TRIGGER trg_audit;
-- bulk load...
ALTER TABLE orders ENABLE TRIGGER trg_audit;

-- Disable ALL triggers (use carefully):
ALTER TABLE orders DISABLE TRIGGER ALL;

Pengulangan Pencetus

UPDATE pencetus pada jadual yang sama akan mencetuskan pencetus itu sekali lagi. Gunakan pengawal (pg_trigger_depth()) atau reka bentuk dengan teliti.

Ringkasan

Pencetus mengautomatikkan tindak balas bagi setiap baris.

  • Fungsi yang mengembalikan TRIGGER + CREATE TRIGGER
  • BEFORE untuk mengubah suai, AFTER untuk kesan sampingan
  • NEW/OLD untuk akses baris
  • WHEN dan OF lajur untuk pemilihan yang lebih khusus

Semakan Pantas

Anda mahu mengemas kini lajur updated_at secara automatik setiap kali berlaku perubahan pada baris. Apakah persediaan pencetus yang sesuai?

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 “Anatomi Pencetus: BEFORE/AFTER, FOR EACH ROW” percuma?

Ya — teks penuh “Anatomi Pencetus: BEFORE/AFTER, FOR EACH ROW” 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 “Anatomi Pencetus: BEFORE/AFTER, FOR EACH ROW”?

Fahami masa pencetus, kegranularan (baris berbanding pernyataan), serta maksud NEW dan OLD dalam fungsi pencetus. 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 1 daripada 4.

Berapa lamakah pelajaran “Anatomi Pencetus: BEFORE/AFTER, FOR EACH ROW” 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. Anatomi Pencetus: BEFORE/AFTER, FOR EACH ROW
  2. Asas Fungsi PL/pgSQL
  3. Blok DO dan Kod Tanpa Nama
  4. Mengaudit Jadual dengan Pencetus
← Kembali ke SQL Academy