BEFORE और AFTER Triggers
In this page:
CREATE TRIGGER trigger_name
BEFORE | AFTER INSERT | UPDATE | DELETE
ON table_name
FOR EACH ROW
BEGIN
-- NEW.column_name, OLD.column_name
END
BEFORE बनाम AFTER Triggers
BEFORE triggers MySQL के actually disk पर एक row लिखने से पहले execute होते हैं, उन्हें पहले data inspect या बदलने का मौका देते हुए, जबकि AFTER triggers सिर्फ तभी चलते हैं जब change पहले से permanently save हो चुका हो।
उदाहरण: BEFORE vs AFTER Triggers
DELIMITER //
CREATE TRIGGER before_insert_user BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.email = LOWER(NEW.email);
END //
CREATE TRIGGER after_insert_user AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO user_audit (user_id, action) VALUES (NEW.id, 'created');
END //
DELIMITER ;
Data साफ करने के लिए BEFORE Triggers इस्तेमाल करना
क्योंकि एक BEFORE trigger write से पहले चलता है, यह incoming data validate या reformat करने की सही जगह है — NEW keyword इस्तेमाल करके, आप store होने से पहले एक value adjust कर सकते हैं।
उदाहरण: Using BEFORE Triggers to Clean Data
DELIMITER //
CREATE TRIGGER trim_name BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.name = TRIM(NEW.name);
END //
DELIMITER ;
UPDATE Triggers में OLD Values Access करना
UPDATE triggers को एक साथ OLD और NEW दोनों तक access है, आपको directly compare करने देते हुए कि change से पहले एक row कैसी दिखती थी बनाम बाद में यह कैसी दिखती है, जो audit logs बनाने के लिए ज़रूरी है।
उदाहरण: Accessing OLD Values in UPDATE Triggers
DELIMITER //
CREATE TRIGGER log_email_change BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
IF OLD.email <> NEW.email THEN
INSERT INTO user_audit (user_id, action) VALUES (OLD.id, CONCAT('email changed from ', OLD.email, ' to ', NEW.email));
END IF;
END //
DELIMITER ;
BEFORE DELETE Triggers
एक BEFORE DELETE trigger एक row गायब होने से ठीक पहले चलता है, और क्योंकि उस moment पर row अभी भी exist करता है, OLD keyword आपको इसके details हमेशा के लिए गायब होने से पहले capture और log करने देता है।
उदाहरण: BEFORE DELETE Triggers
DELIMITER //
CREATE TRIGGER log_deleted_user BEFORE DELETE ON users
FOR EACH ROW
BEGIN
INSERT INTO user_audit (user_id, action) VALUES (OLD.id, 'deleted');
END //
DELIMITER ;
Audit Logs Verify करना
BEFORE और AFTER triggers द्वारा populated एक audit table query करना आपको यह review करने देता है कि किसने क्या और कब बदला इसका पूरा history, बिना application को खुद कभी वह logging code लिखना पड़े।
उदाहरण: Verifying Audit Logs
CREATE TABLE user_audit (user_id INT, action TEXT);
INSERT INTO user_audit VALUES (1, 'created'), (1, 'deleted');
SELECT * FROM user_audit WHERE user_id = 1;
- save करने से पहले बदले जाने वाले data के validation या cleaning के लिए
AFTERचुनना, जबकिBEFOREचाहिए। - एक
BEFORE DELETEtrigger मेंNEWइस्तेमाल करना, जिसकी कोई नई values नहीं होतीं। - एक trigger लिखना जो उसी table को update करता है जिस पर यह fire होता है, जिसकी अनुमति नहीं और एक error देता है।
Chapter Quiz — Complete all 3 topics to unlock
0/3 topics done
Complete these topics first: