Rumah >pangkalan data >tutorial mysql >Pencetus MySQL Diterangkan dengan Contoh: Mengautomasikan Tindakan Pangkalan Data
MySQL Triggers ialah ciri berkuasa yang membolehkan anda secara automatik melaksanakan tindakan tertentu dalam pangkalan data sebagai tindak balas kepada peristiwa tertentu pada jadual, seperti INSERT, KEMASKINI , atau PADAM. Pencetus berguna untuk menguatkuasakan peraturan perniagaan, mengekalkan integriti data atau mengelog perubahan tanpa perlu mengurus secara eksplisit tindakan ini dalam kod aplikasi.
Dalam panduan ini, kami akan membincangkan perkara pencetus, cara ia berfungsi dan memberikan contoh praktikal untuk membantu anda memahami penggunaannya dalam MySQL.
pencetus ialah satu set pernyataan SQL yang dilaksanakan secara automatik (atau "dicetuskan") oleh MySQL apabila peristiwa tertentu berlaku pada jadual. Acara itu boleh menjadi salah satu daripada yang berikut:
Pencetus boleh ditakrifkan untuk dijalankan sama ada SEBELUM atau SELEPAS acara, yang memberi anda fleksibiliti dalam cara anda mahu mengendalikan data anda.
Sintaks umum untuk mencipta pencetus dalam MySQL adalah seperti berikut:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_body;
SEBELUM Pencetus: Tindakan pencetus dilaksanakan sebelum peristiwa pencetus (cth., sebelum operasi sisipan, kemas kini atau padam). Ini membolehkan anda mengubah suai data sebelum ia diletakkan pada jadual.
AFTER Trigger: Tindakan pencetus dilaksanakan selepas peristiwa (cth., selepas rekod dimasukkan, dikemas kini atau dipadamkan). Ini berguna apabila anda ingin mengambil tindakan berdasarkan perubahan yang dibuat pada data, seperti pengelogan.
Misalkan kita mempunyai jadual yang dipanggil pekerja yang mengandungi maklumat pekerja, termasuk lajur create_at. Kita boleh mencipta pencetus AFTER INSERT untuk menetapkan medan created_at secara automatik kepada cap masa semasa apabila rekod baharu dimasukkan.
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_body;
Dalam contoh ini:
Bayangkan produk jadual dengan harga lajur dan diskaun, dan anda mahu mengemas kini medan harga_diskaun secara automatik apabila harga dikemas kini.
CREATE TRIGGER set_created_at AFTER INSERT ON employees FOR EACH ROW BEGIN UPDATE employees SET created_at = NOW() WHERE id = NEW.id; END;
Dalam contoh ini:
Anda boleh menggunakan pencetus untuk menguatkuasakan peraturan perniagaan, seperti menghalang pemadaman baris tertentu. Contohnya, dalam jadual pekerja, anda mungkin mahu menghalang pemadaman pekerja yang dibenderakan sebagai kritikal.
CREATE TRIGGER update_discounted_price AFTER UPDATE ON products FOR EACH ROW BEGIN IF NEW.price <> OLD.price THEN UPDATE products SET discounted_price = NEW.price * (1 - NEW.discount / 100) WHERE id = NEW.id; END IF; END;
Dalam contoh ini:
Pencetus boleh digunakan untuk tujuan pengelogan, seperti mengekalkan log audit untuk sisipan dalam jadual. Berikut ialah contoh yang mengelog setiap pekerja baharu yang ditambahkan pada jadual pekerja ke dalam jadual audit_log.
CREATE TRIGGER prevent_delete_critical_employee BEFORE DELETE ON employees FOR EACH ROW BEGIN IF OLD.is_critical = 1 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete critical employee'; END IF; END;
Dalam contoh ini:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_body;
CREATE TRIGGER set_created_at AFTER INSERT ON employees FOR EACH ROW BEGIN UPDATE employees SET created_at = NOW() WHERE id = NEW.id; END;
Kesan Prestasi: Pencetus menambah overhed pada operasi pangkalan data anda kerana ia melaksanakan pernyataan SQL tambahan. Berhati-hati tentang betapa kompleksnya logik pencetus, terutamanya untuk jadual besar atau operasi yang kerap.
Trigger Nesting: Berhati-hati dengan pencetus yang mengubah suai jadual yang sama, kerana ini boleh menyebabkan gelung tidak terhingga atau penggunaan sumber yang berlebihan. MySQL tidak membenarkan pencetus untuk memanggil sendiri secara langsung (pencetus rekursif).
Integriti Data: Pencetus berguna untuk memastikan integriti data, seperti menghalang pemadaman yang tidak diingini, tetapi ia mungkin sukar untuk dinyahpepijat. Sentiasa pastikan logik pencetus didokumentasikan dengan baik.
Pengujian Pencetus: Sentiasa uji pencetus dengan teliti dalam persekitaran pembangunan atau pementasan sebelum menggunakannya ke pengeluaran, kerana kesan sampingan yang tidak diingini boleh menjejaskan prestasi aplikasi atau logik perniagaan.
Pencetus MySQL ialah ciri yang berkuasa untuk mengautomasikan tindakan sebagai tindak balas kepada perubahan dalam pangkalan data, seperti sisipan, kemas kini dan pemadaman. Dengan menggunakan pencetus, anda boleh menguatkuasakan peraturan perniagaan, mengekalkan integriti data dan mengautomasikan tugas seperti pengauditan atau pengelogan. Walau bagaimanapun, adalah penting untuk mempertimbangkan dengan teliti implikasi prestasi dan memastikan bahawa pencetus dilaksanakan dengan teliti untuk mengelakkan kesan negatif terhadap prestasi sistem anda.
Atas ialah kandungan terperinci Pencetus MySQL Diterangkan dengan Contoh: Mengautomasikan Tindakan Pangkalan Data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!