कोई पंक्तियों के प्रभावित होने के बावजूद ट्रिगर फायरिंग


10

यह एक सामान्य प्रश्न से अधिक है, लेकिन इस प्रश्न के लिए प्रेरणा एक समस्या थी जिसका मैंने SQL सर्वर का उपयोग करते समय सामना किया था।

मेरे पास यह ट्रिगर एक इंसर्ट इवेंट से जुड़ी एक मेज पर है जिसमें कुछ तर्क हैं, जो साइड इफेक्ट के रूप में, अगर कोई पंक्तियाँ सम्मिलित नहीं हुईं, तो त्रुटि बढ़ जाएगी। आगे की जांच करने पर, मुझे पता चला कि कोई पंक्तियाँ डाले जाने के बावजूद ट्रिगर फायरिंग हो रही थी।

DML ट्रिगर पर Microsoft डॉक्स में प्रयुक्त भाषा इस व्यवहार के विपरीत प्रतीत होती है:

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

क्या यह डीबीएमएस में एक डिफ़ॉल्ट व्यवहार है? क्या कोई ट्रिगर प्रभावित होने का कोई विशेष कारण है जब कोई पंक्तियाँ प्रभावित नहीं होती हैं?

जवाबों:


24

DML क्रियाओं के लिए, पंक्ति आधारित और कथन आधारित ट्रिगर होते हैं।

  • जब पंक्ति पहले (प्रत्येक के बाद या बाद में) प्रभावित होती है, तो प्रत्येक पंक्ति प्रभावित होती है (सम्मिलित / अद्यतन / हटाई गई)। तो वे 100 बार आग लगायेंगे यदि 100 पंक्तियाँ प्रभावित होती हैं और यदि 0 पंक्तियाँ प्रभावित होती हैं तो बिल्कुल नहीं।

  • जब कोई INSERT / UPDATE / DELETEकथन निष्पादित किया जाता है तो स्टेटमेंट में आग लग जाती है। इससे कोई फर्क नहीं पड़ता कि कोई पंक्तियाँ प्रभावित न हों। स्टेटमेंट लेवल किसी भी समय और केवल एक बार (चाहे यह 0, 100 या एक अरब पंक्तियों से प्रभावित हो) के लिए आग को ट्रिगर करता है।

कुछ DBMS में केवल पंक्ति स्तर ट्रिगर (MySQL) होता है।

अन्य (जैसे SQL सर्वर * जो आपका DBMS है) में केवल स्टेटमेंट लेवल ट्रिगर्स होते हैं।

कुछ अन्य (DB2, Oracle, Postgres) में दोनों प्रकार के ट्रिगर हैं।


* SQL सर्वर CREATE TRIGGERडॉक्स स्थिति:

जब उपयोगकर्ता डेटा हेरफेर भाषा (DML) ईवेंट के माध्यम से डेटा को संशोधित करने का प्रयास करता है, तो DML चलाता है। DML ईवेंट्स हैं INSERT, UPDATEया DELETEकिसी टेबल या व्यू पर स्टेटमेंट हैं। किसी भी वैध घटना को निकाल दिए जाने पर ये आग भड़काते हैं, भले ही कोई भी तालिका पंक्तियाँ प्रभावित हों या न हों।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.