CREATE TRIGGER
In this page:
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
BEGIN
-- statements using NEW.column / OLD.column
END
एक Trigger क्या है?
एक trigger database में stored code का एक block है जो एक specific table event के response में automatically fire होता है, एक INSERT, UPDATE, या DELETE के reaction में चलते हुए बिना application के कभी इसे directly call किए।
उदाहरण: What is a Trigger?
DELIMITER //
CREATE TRIGGER log_new_user AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO user_audit (user_id, action) VALUES (NEW.id, 'created');
END //
DELIMITER ;
एक INSERT Trigger बनाना
एक INSERT trigger automatically चलता है जिस table से यह attached है उसमें एक नया row add होते ही, या तो row लिखे जाने से ठीक पहले या ठीक बाद, यह इस पर depend करता है कि यह कैसे defined है।
उदाहरण: Creating an INSERT Trigger
DELIMITER //
CREATE TRIGGER before_user_insert BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
END //
DELIMITER ;
NEW Values Access करना
एक INSERT या UPDATE trigger के अंदर, NEW keyword आपको लिखी जा रही row की actual values तक access देता है, trigger को save होने से पहले उन values को inspect या adjust करने देते हुए।
उदाहरण: Accessing NEW Values
DELIMITER //
CREATE TRIGGER lowercase_email BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.email = LOWER(NEW.email);
END //
DELIMITER ;
Trigger Execution Test करना
Triggers जब चलते हैं तो खुद announce नहीं करते — insert या update के दौरान खुद कोई visible confirmation नहीं होता, इसलिए यह verify करने का मतलब है बाद में जिस भी table को trigger affect करने वाला था उसे query करना।
उदाहरण: Testing Trigger Execution
CREATE TABLE users (id INT, email TEXT);
CREATE TABLE user_audit (user_id INT, action TEXT);
INSERT INTO users VALUES (1, '[email protected]');
-- No confirmation is printed -- check the audit table instead
SELECT * FROM user_audit;
Trigger Restrictions
Triggers original statement चलाने वाले किसी को सीधे एक result set वापस नहीं दे सकते, और MySQL एक trigger को उस same table modify करने से भी block करता है जिसने इसे fire करवाया, infinite recursive triggering से बचने के लिए।
उदाहरण: Trigger Restrictions
-- A trigger on users cannot modify users itself, only other tables,
-- to avoid infinite recursive triggering:
DELIMITER //
CREATE TRIGGER log_new_user AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO user_audit (user_id, action) VALUES (NEW.id, 'created');
END //
DELIMITER ;
- एक
AFTERtrigger मेंSET NEW.colसे एक row बदलने की कोशिश करना, जिसकी अनुमति सिर्फBEFOREtriggers में है। FOR EACH ROWभूल जाना, जो MySQL में required है।- एक
INSERTtrigger मेंOLDया एकDELETEtrigger मेंNEWइस्तेमाल करना, जहाँ वे rows exist ही नहीं करतीं।
Chapter Quiz — Complete all 3 topics to unlock
0/3 topics done
Complete these topics first: