MySQL Triggers

Introduction to MySQL Triggers

Triggers stored programs होते है। ये stored procedures की तरह ही होते है। लेकिन triggers को आप खुद execute नहीं करते है ये automatically execute होते है। Triggers का execution different events के बाद या पहले होता है। MySQL के संदर्भ में events 3 प्रकार के statements द्वारा generate होते है।

  1. INSERT
  2. UPDATE
  3. DELETE

ऊपर दिए गए statements को MySQL में trigger events माना गया क्योंकि ये database में change करते है। जब भी किसी table पर ऊपर दिए गए statements execute हो तो आप triggers fire कर सकते है। इसके लिए आप table से related triggers create करते है। Triggers create करने के बारे में आपको आगे बताया जायेगा।

यदि triggers की official definition की बात करें तो एक trigger database object होता है जो table से associated रहता है। जब भी उस table पर कोई event generate होता है तो trigger execute हो जाता है।

Triggers database administrators का काम थोड़ा आसान कर देते है। क्योंकि triggers के माध्यम से आप tasks को automate कर सकते है जिससे database administrators को उन्हें manually perform नहीं करना पड़ता है।

Triggers के द्वारा आप table पर validation perform कर सकते है। उदाहरण के लिए यदि आप table में कोई नयी row insert कर रहे है तो इससे पहले की pass की गयी values table में insert हो आप check कर सकते है की values valid है या नहीं।

Triggers के द्वारा आप different events पर कुछ calculations भी perform कर सकते है। जैसे की insert statement के बाद आप values पर calculations perform करके नयी table भी generate कर सकते है।

Triggers केवल तब ही fire होते है जब SQL statements द्वारा MySQL table में कुछ change किया जाता है। बाकी और किसी reason जैसे की Information schema आदि में change की वजह से triggers fire नहीं होते है।

किसी भी trigger को temporary table या view से associate नहीं किया जा सकता है। ये केवल permanent table के साथ ही associated रहता है।

आइये अब देखते है की आप MySQL में triggers किस प्रकार create कर सकते है।

Creating MySQL Triggers

MySQL में triggers create करने का general syntax निचे दिया जा रहा है।

mysql > CREATE TRIGGER trigger_name
> TRIGGER-TIME TRIGGER-EVENT on TABLE-NAME
> FOR EACH ROW
>BEGIN  
> trigger_body
>END  

जैसा की आप ऊपर दिए गए syntax में देख सकते है trigger create करते समय सबसे पहले CREATE TRIGGER statement define किया जाता है। इसके बाद trigger का नाम दिया जाता है।

इसके बाद किसी भी trigger के 2 सबसे महत्वपूर्ण elements define किये जाते है।

  • TRIGGER-TIME – ये trigger का execution time होता है। जैसा की मैने आपको topic की शुरआत में बताया था की या तो trigger किसी event से पहले execute होते है या बाद में execute होते है। इससे आप ये define करते है की trigger कब execute होगा। इसकी 2 values होती है।
    • BEFORE – जब आप चाहते है की trigger event से पहले execute हो तो आप trigger time BEFORE set कर सकते है।
    • AFTER – यदि आप trigger को event के बाद में execute करना चाहते है तो trigger time AFTER set कर सकते है।
  • TRIGGER-EVENT – Trigger events INSERT, UPDATE और DELETE होते है। आप जिस पर भी trigger fire करना चाहे उसे trigger time के बाद define कर देते है।

TRIGGER EVENT के बाद आप define करते है की आप कौनसी table पर event execute करना चाहते है। इसके लिए ON command यूज़ की जाती है। ON statement define करने के बाद आप उस table का नाम देते है जिस पर आप trigger execute करना चाहते है।

इसके बाद FOR EACH ROW clause define किया जाता है। ये बताता है की trigger table की हर us row के लिए execute होगा जो event द्वारा affected होगी।

इसके बाद आप trigger की body define करते है। ये वो SQL statements होते है जो event generate होने पर trigger द्वारा execute किये जायेंगे।

OLD and NEW Aliases

जब भी आप triggers के द्वारा affected rows के साथ काम करना चाहते है तो इसके लिए MySQL आपको OLD और NEW aliases provide करती है। OLD alias event generate होने से पहले के records को represent करता है और NEW alias event generate होने के बाद के records को represent करता है।

Old records को handle करने के लिए आप OLD alias लिखते है इसके बाद dot operator लगाकर table का नाम लिखते है। इसी प्रकार आप new records को भी handle करते है।

आइये अब triggers को एक उदाहरण के माध्यम से समझने का प्रयास करते है।

Example

मान लीजिये आप उन employees की table maintain करना चाहते है जिन्होंने आपकी organization छोड़ दी है। ऐसी situation में company छोड़ने वाले employees की entry Employee table से delete की जाएगी।

अब आप इस delete event पर trigger associate कर सकते है ताकि delete की गयी हर employee की information FiredEmployee table में save हो जाये ऐसा आप इस प्रकार सकते है।

mysql > delimiter //
mysql > create trigger empTrigger after delete on Employee for each row
> begin
> insert into FiredEmployee (Id, Name, Age, Salary) values (old.Id, old.Name, old.Age, old.Salary);
> end //
mysql > delimiter ;  

जब भी आपकी company में से कोई employee नौकरी छोड़कर जायेगा और उसका data delete किया जायेगा तो वो automatically fired employees वाली table में save हो जायेगा।

Deleting Triggers

जब भी कोई table delete की जाती है तो उससे related सभी triggers automatically delete हो जाते है। लेकिन यदि आप सिर्फ trigger को delete करना चाहते है तो ऐसा DROP statement की मदद से कर सकते है। इसका syntax निचे दिया जा रहा है।

mysql > DROP TRIGGER trigger_Name;

यदि trigger किसी दूसरे schema में है तो आप निचे दिया गया syntax use कर सकते है।

mysql > DROP TRIGGER schemaName.triggerName;

Triggers को delete करना निचे उदाहरण के माध्यम से समझाया जा रहा है।

mysql > drop trigger empTrigger;