2012-04-16 19 views
42

मुझे 'पंक्ति-स्तर ट्रिगर' और 'कथन-स्तरीय ट्रिगर्स' के बीच अंतर को समझने में कठिनाई हो रही है।पंक्ति-स्तर ट्रिगर बनाम कथन-स्तरीय ट्रिगर

मेरी समझ से, परिदृश्य में एक कथन स्तर ट्रिगर बनता है, पूरी तालिका को संशोधित किया जा सकता है। एक पंक्ति स्तर ट्रिगर केवल मुझे ट्रिगर के विशिष्ट घटना से प्रभावित होने वाले टुपल को संशोधित करने की अनुमति देगा।

क्या यह सही है? क्या किसी के पास दोनों का उदाहरण है?

धन्यवाद!

उत्तर

67

मुख्य अंतर यह नहीं है कि ट्रिगर द्वारा संशोधित किया जा सकता है, जो डीबीएमएस पर निर्भर करता है। एक ट्रिगर (पंक्ति या कथन स्तर) एक या कई पंक्तियों के साथ-साथ एक या कई पंक्तियों को संशोधित कर सकता है और इसमें कैस्केडिंग प्रभाव हो सकते हैं (अन्य क्रियाओं/ट्रिगर्स को ट्रिगर कर सकते हैं) लेकिन ये सभी डीबीएमएस पर निर्भर करते हैं।

मुख्य अंतर यह है कि ट्रिगर सक्रिय होने पर कितनी बार सक्रिय होता है। कल्पना कीजिए कि आप एक 1M पंक्तियां तालिका है और आप चलाएँ:

UPDATE t 
SET columnX = columnX + 1 

एक बयान स्तरीय ट्रिगर एक बार (और कोई भी पंक्ति अपडेट किया जाता है, भले ही) सक्रिय हो जाएगा। प्रत्येक पंक्ति पंक्ति के लिए एक पंक्ति-स्तर ट्रिगर को एक लाख बार, सक्रिय किया जाएगा।


एक और अंतर आदेश या सक्रियण है।

Before the triggering statement executes 
Before each row that the triggering statement affects 
After each row that the triggering statement affects 
After the triggering statement executes 

पिछले उदाहरण में, हम की तरह कुछ होगा:

Before statement-level trigger executes 

    Before row-level trigger executes 
    One row is updated 
    After row-level trigger executes 

    Before row-level trigger executes 
    Second row is updated 
    After row-level trigger executes 

    ... 

    Before row-level trigger executes 
    Millionth row is updated 
    After row-level trigger executes 

After statement-level trigger executes 
+0

तो, एक कथन स्तर ट्रिगर एक पंक्ति को संशोधित करने में सक्षम होगा, जबकि पंक्ति-स्तर तालिका में प्रत्येक पंक्ति को संशोधित करने में सक्षम होगा? –

+2

नहीं, एक पंक्ति-स्तरीय ट्रिगर का उपयोग कई पंक्तियों को अद्यतन/हटाने/डालने के लिए भी किया जा सकता है। या अन्य तालिकाओं में पंक्तियां। –

+1

और एक कथन-स्तरीय ट्रिगर भी। –

17

आप को ट्रिगर कार्रवाई चाहते हो सकता है Oracle में उदाहरण के लिए ट्रिगर के 4 विभिन्न प्रकार के निम्न क्रम में सक्रिय हो जाएगा ग्राहक द्वारा एक बयान निष्पादित करने के बाद एक बार निष्पादित करें जो दस लाख पंक्तियों (कथन-स्तरीय ट्रिगर) को संशोधित करता है। या, आप संशोधित (पंक्ति-स्तर ट्रिगर) की प्रत्येक पंक्ति के लिए एक बार कार्रवाई को ट्रिगर करना चाह सकते हैं।

उदाहरण: मान लीजिए कि आपके पास एक ट्रिगर है जो सुनिश्चित करेगा कि सभी हाई स्कूल सीनियर स्नातक हों। यही है, जब एक वरिष्ठ ग्रेड 12 होता है, और हम इसे 13 तक बढ़ाते हैं, तो हम ग्रेड को NULL पर सेट करना चाहते हैं।

एक कथन स्तर ट्रिगर के लिए, आप कहेंगे, ग्रेड-ग्रेड स्टेटमेंट रन के बाद, ग्रेड 13 से NULL के साथ किसी भी पंक्ति को अपडेट करने के लिए पूरी तालिका को एक बार जांचें।

एक पंक्ति-स्तर ट्रिगर के लिए, आप कहेंगे, प्रत्येक पंक्ति है कि अद्यतन किया जाता है के बाद, NULL को नई पंक्ति के ग्रेड को अद्यतन करता है, तो यह 13

एक बयान स्तरीय ट्रिगर इस प्रकार दिखाई देगा है:

create trigger stmt_level_trigger 
after update on Highschooler 
begin 
    update Highschooler 
    set grade = NULL 
    where grade = 13; 
end; 

और एक पंक्ति-स्तर ट्रिगर इस प्रकार दिखाई देगा:

create trigger row_level_trigger 
after update on Highschooler 
for each row 
when New.grade = 13 
begin 
    update Highschooler 
    set grade = NULL 
    where New.ID = Highschooler.ID; 
end; 

ध्यान दें कि SQLite बयान स्तरीय चलाता समर्थन नहीं करता, SQLite में ऐसा है, FOR EACH ROW वैकल्पिक है।

0

बयान स्तर ट्रिगर DML कथन पंक्ति leval ट्रिगर के लिए केवल एक बार है dml बयान

0

अगर आप बयान निष्पादित करने के लिए जब पंक्तियों की संख्या संशोधित कर रहे हैं तो यह बयान स्तर ट्रिगर द्वारा संभव हो सकता है चाहते हैं के लिए प्रत्येक पंक्ति के लिए है। viseversa ... जब आप अपनी पंक्तियों की संख्या पर प्रत्येक संशोधन को निष्पादित करना चाहते हैं तो आपको पंक्ति स्तर ट्रिगर्स के लिए जाना होगा ..

उदाहरण के लिए: कथन स्तर ट्रिगर्स तालिका के संशोधित होने के लिए काम करता है .. फिर रिकॉर्ड की अधिक संख्या प्रभावित होती है। और पंक्ति के स्तर से चलाता है जब प्रत्येक पंक्ति को अद्यतन या संशोधन ..

1

बयान स्तर ट्रिगर के बीच मुख्य अंतर से कम है के लिए काम करता है:

बयान स्तर ट्रिगर: नाम के आधार पर यह काम करता है यदि कोई बयान निष्पादित किया जाता है। इस बात पर निर्भर नहीं करता कि कितनी पंक्तियां या कोई पंक्तियां प्रभावित होती हैं। यह केवल एक बार निष्पादित होती है। एक्सप: यदि आप विभाग एचआर से प्रत्येक कर्मचारी का वेतन अपडेट करना चाहते हैं और अंत में आप जानना चाहते हैं कि कितनी पंक्तियां प्रभावित होती हैं इसका मतलब है कि कितने वेतन में वृद्धि हुई है तो कथन स्तर ट्रिगर का उपयोग करें। कृपया ध्यान दें कि शून्य पंक्तियों को अपडेट होने पर भी ट्रिगर निष्पादित होगा क्योंकि यह कथन स्तर ट्रिगर को कॉल किया गया है यदि कोई कथन निष्पादित किया गया है। कोई फर्क नहीं पड़ता कि यह किसी भी पंक्ति को प्रभावित कर रहा है या नहीं।

पंक्ति स्तर ट्रिगर: प्रत्येक पंक्ति को प्रभावित होने पर निष्पादित करता है। यदि शून्य पंक्ति प्रभावित होती है। कोई पंक्ति स्तर ट्रिगर निष्पादित नहीं होगा। मान लीजिए कि यदि आप एएमपी तालिका से एक नियोक्ता को हटाना चाहते हैं जिसका विभाग एचआर है और आप चाहते हैं कि जैसे ही कर्मचारी एमएमपी तालिका से हटा दिया जाए, एचआर सेक्शन में डिप्टी टेबल में गिनती कम होनी चाहिए 1. फिर आपको पंक्ति स्तर ट्रिगर का चयन करना चाहिए।

संबंधित मुद्दे