SQL Triggers in Hindi - SQL ट्रिगरर्स क्या है?

SQL में Triggers एक विशेष प्रोग्राम है। जब एक Table में data को Insert, Update, या Delete किया जाता है तब यह Triggers अपने आप run होता है।

ये data को सही बनाए रखने, नियमों को लागू करने या कार्यों को स्वचालित रूप से करने में मदद करता है। 

उदाहरण के लिए एक Trigger data को table में Insert होने से पहले जांचता है, गलत data की entry को रोकता है, data बदलने के बाद दूसरी table को update करता है।

Triggers, मानों की जांच करने या उसकी गणना करने के लिए नए या पुराने data का उपयोग करता है। यह डाटा को सही बनाए रखने के लिए उपयोगी है 

परंतु बहुत सारे ट्रिगर्स का प्रयोग करने से debugging का कार्य  कठिन हो जाता हैं। साथ ही बहुत जटिल ट्रिगर्स performance को धीमी कर सकते हैं, इसलिए उन्हें बहुत सावधानी पूर्वक लिखना चाहिए। 

Triggers, का उपयोग करना उस समय बेहतर है जब आपको कोई action तुरंत लेने या स्वचालित रूप से करने की जरूरत है। 


एक Trigger का निर्माण करना(Syntax और Example)- 

Trigger का निर्माण के लिए Create Trigger command का उपयोग किया जाता है।  

Syntax
:

CREATE TRIGGER trigger_name
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON table_name
FOR EACH ROW
BEGIN
    -- SQL statements
END;

ऊपर के Syntax को निम्न प्रकार से समझते हैं।

CREATE TRIGGER trigger_name:
इससे एक नए ट्रिगर का निर्माण होता है और उस ट्रिगर को एक नाम दिया जाता है। 

BEFORE | AFTER: 
trigger को event कि पहले(Before) या बाद में (After) चलाना है इसका चयन करते हैं।
 
INSERT | UPDATE | DELETE: 
यह ट्रिगर को शुरू करने वाला event है। 
ON table_name: 
इस table पर ट्रिगर कार्य करता है। 

FOR EACH ROW: 
ट्रिगर हर उस row पर चलता है जो बदलती है।

BEGIN ... END: 
trigger को क्या करना चाहिए उसे इस block के अंदर लिखा जाता है।

Example:
हम एक Employees table के लिए Trigger का निर्माण करेंगे। इस table में EID, Name, City और Salary नाम से fields बना हुआ है।

यह Table खाली है इसमें कोई data Insert नही हुआ है। हम इस table में इस प्रकार का Trigger बनाना चाहते हैं कि जब इसमे डेटा, Insert किया जाए और Salary अगर 10,000 से कम Insert करे हो हमे एक Warning signal मिले जो हमे डेटा डालने से रोक दे।

ऊपर के trigger को निम्न प्रकार से समझने का प्रयास करते हैं।

Explaination 

DELIMITER $$: 
MySQL इसे देखकर trigger को जल्दी समाप्त नहीं करता।

CREATE TRIGGER:
यह before_employee_insert नाम से नया trigger डिफाइन करता है।

BEFORE INSERT: 
Employee table में नए Row Insert करने से पहले trigger रन करता है।

NEW.salary: 
यह salary की value को बताता है जिसे इनपुट किया जाना है। 

IF condition: 
यह जांच करता है कि क्या salary 10000 से कम है। 

SIGNAL SQLSTATE '45000': 
 एक error देता और insert के कार्य को रोक देता है। 

MESSAGE_TEXT: 
यह Custom error message है जिसे यूजर को दिखाया जाता है। 

हमने एक ट्रिगर का निर्माण कर लिया है अब हम Employees table में निम्न प्रकार से एक Row Insert करने का प्रयास करते हैं।

ऊपर के SQL statements में जब हम एक Row Insert करते है जिसमे salary, 9,000 है अर्थात 10,000 से कम है तो trigger अपने आप रन होता है और हमें 'Salary below 10000 is not allowed' करके एक Error message मिलता है और Row Insert होने का कार्य रुक जाता है।


Trigger के प्रकार - Types of triggers in Hindi

SQL में Trigger के निम्न प्रकार होते हैं।

BEFORE Trigger

SQL में Before Trigger एक table के data पर INSERT, UPDATE, या DELETE जैसे कार्य होने के पहले अपने आप रन होता है। 

BEFORE Trigger का उपयोग data को टेबल में सुरक्षित करने से पहले उसकी की जांच करने या उसमे बदलाव के लिए किया जाता है।

उदाहरण के लिए, आप **Before Trigger** का उपयोग वोट देने वाले व्यक्ति की उम्र के लिए कर सकते हैं। अगर कोई व्यक्ति अपनी उम्र 18 से कम दर्ज करता है, तो यह ट्रिगर उसे ऐसा करने से रोक देगा।

Example:
हमारे पास एक Voters table है, जिसमें VID, Name, City, Age और Mobile fields है। इस table में कोई data नही डालें है। 

इसके लिए हम एक ट्रिगर का निर्माण करेंगे जो यह तय करेगा कि यदि Voters table में किसी व्यक्ति की उम्र 18 से कम Insert किया जाए तो यह ट्रिगर एक एरर मैसेज देगा। नीचे एक ट्रिगर बनाया गया है।

ऊपर SQL statement में स्पष्ट दिख रहा है कि Age 18 से कम नहीं होना चाहिए और अगर ऐसा होता है तो 'Age must be at least 18' Error message आयेगा।

अब हम check_voter_age नामक trigger को Voters table के लिए जांच करेंगे। अतः हम Voters table पर एक Row Insert करने का प्रयास करेंगे

हमने Age को 16 रखा हैं जो trigger के कंडीशन को पूरा नहीं करता अतः हमें एरर मैसेज मिलता है।


AFTER Trigger 

SQL में AFTER trigger, एक table पर INSERT, UPDATE, या DELETE operation के पूरे होने पर रन होते हैं। 

जब आप सुरक्षित या बदले हुए data में कुछ करना चाहते हैं तब इसका उपयोग कर सकते है। 

चूंकि यह data में बदलाव के बाद रन होता है, इसलिए यह अंतिम सुरक्षित data का उपयोग कर सकता है।

Example 
हमारे पास Employees नाम से एक Table है जिसके लिए हम ट्रिगर का निर्माण करना चाहते हैं। 


हमारा ट्रिगर इस प्रकार होगा कि जब भी Employess table से Employess की salary update की जायेगी तब पुराने salary (जो Employess table में पहले से है) और नए salary(जो हम डालेंगे) की तुलना की जाएगी और यदि दोनों बराबर नहीं है तो salary_history नामक एक नए table में उसे सुरक्षित किया जाएगा।

अतः trigger बनाने के पहले हमें सबसे पहले एक नया टेबल salary_history और बनाना होगा जिसमें वही फील्ड होना चाहिए जो Employess table में है। salary_history में कोई data enter नही करना है। ट्रिगर के रन होते ही इसमें data अपने आप insert होते जाएगा

salary_history table बन जाने के बाद हम निम्न प्रकार से ट्रिगर का निर्माण करते हैं। 

यह ट्रिगर तब चलेगा जब Employees table के Salary field में update करेंगे अर्थात salary में बदलाव लाएंगे।

चलिए हम  Employees table की salary में update करते है।

हमने Employees table मे उसकी salary को update किया है जिसकी eid 1 है। वास्तव में यह Amit employee की salary हैं जो 24,000 (पुरानी सैलरी) थी
जैसे ही हम 35,000 update (नई salary) करेंगे तब ट्रिगर अपने आप रन होगा

चूकि दोनों salary अलग अलग है अतः salary_history टेबल मे निम्न प्रकार से दोनो salary Amit की लिए Insert हो जायेगी याद रखे salary_history टेबल में अपने आप यह Insert हुआ हमने manually नही किया है।


अगर आप Employees table को देखेंगे तो Amit की Salary 35,000 update हो जाती है। जबकि salary_history table पुराने और नए दोनो salary को रखता है।


Trigger कैसे काम करता है ?- How does trigger work in Hindi 

Trigger निम्न प्रकार से काम करता है
  • जब डेटाबेस में कुछ घटना घटती है तब एक Trigger अपने आप शुरू होकर काम करता है। 
  • ये घटनाएं कुछ भी हो सकती है जैसे आप एक टेबल में नया डेटा जोड़ (INSERT) रहे हैं या डेटा में बदलाव(UPDATE) कर रहे हैं या कुछ डेटा को हटा(DELETE) रहे हैं।
  • जब एक table में इसमें से कुछ भी एक घटना होती है तब trigger अपने आप चलता है इसे किसी को चालू करने की जरूरत नहीं होती।
  • trigger, नए और पुरानी डेटा को देखता है, नियमों की जांच करता है, अन्य टेबल को अपडेट करता है या रिकॉर्ड में हुए बदलाव को बनाए रखता है। 
  • यह डेटा को सही और सुरक्षित बनाए रखने में मदद करता है। Triggers, event कि पहले या बाद में चलता है। 


Trigger के उपयोग - Use of Triggers in Hindi

Trigger के निम्न उपयोग है 
1. Keep data correct: 
Triggers, यह सुनिश्चित करता है की महत्वपूर्ण नियमों का अनुसरण हमेशा किया जाए। 
2. Record changes: 
data को किसने बदला है और कब इस जानकारी को सुरक्षित रखता है। 

3. Do automatic calculations: Triggers, मानो को अपडेट करता है जैसे कि टोटल को खुद से अपडेट करना।

4. Stop wrong data: 
यह डेटा को सुरक्षित करने से पहले जांचता हैं और गलतियों को रोकता है। 

5. Follow business rules: 
Triggers, उन कार्यों को रोक देता है जो कंपनी के नियमों को तोड़ते हैं। 

6. Protect data: 
Triggers, असुरक्षित या unauthorized बदलावो को block कर देता है। 

7.Send Alerts: 
Trigger नोटिफिकेशन देता है जैसे स्टॉक कम होने पर चेतावनी देना।


Trigger के लाभ - Advantages of Trigger in Hindi

Trigger के निम्न लाभ है।

1. जब table में डेटा जोड़ा, बदला या हटाया जाता है, तब ट्रिगर अपने आप काम करते हैं।

2. ये database में डाटा को सही और एक समान बनाए रखने में मदद करते हैं।

3. ये एक ही code को बार-बार लिखने की जरूरत को कम कर देते हैं। 

4. ट्रिगर जटिल व्यावसायिक नियमों का पालन खुद ही करते हैं, इसके लिए किसी व्यक्ति की जांच की जरूरत नहीं होती।
 
5. जब मुख्य टेबल में बदलाव होता है तब यह संबंधित tables को अपडेट कर देता है। 

6. Triggers, डेटा को सुरक्षित रखने में मदद करता है। 

7. यह पुराने और नए डेटा को लॉग टेबल में रखकर सभी कार्यों का रिकॉर्ड सुरक्षित रखता है।


Trigger की सीमाएं - Limitations of Trigger in Hindi

Trigger की निम्न सीमाएं होती है।

1. यदि Triggers के भीतर कुछ गलत होता है तो उसे debug करना कठिन है।
 
2. वे स्वचालित रूप से बैकग्राउंड में रन होते हैं अतः developers हैं को पता ही नहीं होता कि वे क्रियान्वित हो रहे हैं। 

3. बहुत सारे जटिल ट्रिगर्स डेटाबेस को धीमा कर सकते हैं।

4. यह ट्रिगर उपयोगकर्ता से सीधे बातचीत नहीं कर सकते और न ही उनसे कोई इनपुट ले सकते।

5. Triggers के अंदर Error handling सीमित है। 

6.एक ट्रिगर दूसरे ट्रिगर को चला सकता है, जिससे लूप या अनचाही
 समस्याएं हो सकती हैं।

7. कुछ databases सभी objects जैसे views पर triggers के अनुमति नहीं देते

8. कई Trigger को बड़े सिस्टम में manage करने से भ्रम पैदा हो सकता है।