Database trigger
एक डेटाबेस ट्रिगर प्रक्रियात्मक कोड है जो एक विशेष तालिका पर कुछ घटनाओं या डेटाबेस में देखने के जवाब में स्वचालित रूप से निष्पादित होता है। ट्रिगर का उपयोग ज्यादातर डेटाबेस पर जानकारी की अखंडता को बनाए रखने के लिए किया जाता है। उदाहरण के लिए, जब कर्मचारियों की तालिका में एक नया रिकॉर्ड (एक नए कर्मचारी का प्रतिनिधित्व करने वाला) जोड़ा जाता है, तो करों, छुट्टियों और वेतन की तालिकाओं में नए रिकॉर्ड भी बनाए जाने चाहिए। ट्रिगर्स का उपयोग ऐतिहासिक डेटा लॉग करने के लिए भी किया जा सकता है, उदाहरण के लिए कर्मचारियों के पिछले वेतन पर नज़र रखने के लिए। डी. बी. एम. एस. में ट्रिगर्स नीचे दिए गए विवरणों की एक श्रृंखला का अनुसरण करते हैं कि कैसे कुछ लोकप्रिय डी. बी. एम. एस. समर्थन ट्रिगर्स करते हैं। ओरेकल डेटा के संशोधित होने पर उस आग (और पीएल/एसक्यूएल कोड को निष्पादित करने) को ट्रिगर करने के अलावा, ओरेकल 10जी उस आग को ट्रिगर करने का समर्थन करता है जब स्कीमा-स्तर की वस्तुओं (यानी, तालिकाओं) को संशोधित किया जाता है और जब उपयोगकर्ता लॉगऑन या लॉगऑफ़ घटनाएँ होती हैं। चार मुख्य प्रकार के ट्रिगर हैंः पंक्ति-स्तरीय ट्रिगरः यह पंक्ति के किसी भी कॉलम मूल्य से पहले या बाद में निष्पादित हो जाता है कॉलम-स्तरीय ट्रिगरः यह निर्दिष्ट कॉलम परिवर्तन से पहले या बाद में निष्पादित हो जाता है प्रत्येक पंक्ति प्रकार के लिएः यह ट्रिगर प्रत्येक प्रविष्टि/अद्यतन/विलोपन से प्रभावित परिणाम सेट की प्रत्येक पंक्ति के लिए एक बार निष्पादित हो जाता है प्रत्येक कथन प्रकार के लिएः यह ट्रिगर पूरे परिणाम सेट के लिए केवल एक बार निष्पादित होता है, लेकिन हर बार कथन निष्पादित होने पर फायर भी करता है। सिस्टम-स्तर के ट्रिगर्स ओरेकल 8i से, डेटाबेस इवेंट-लॉगऑन, लॉगऑफ़, स्टार्टअप-ओरेकल ट्रिगर्स को फायर कर सकते हैं। डी. डी. एल. ट्रिगर्स के लिए माइक्रोसॉफ्ट एस. क्यू. एल. सर्वर में सभी उपलब्ध फायरिंग घटनाओं की एक सूची माइक्रोसॉफ्ट डॉक्स पर उपलब्ध है। ट्रिगर्स में सशर्त कार्य करना (या संशोधन के बाद डेटा का परीक्षण करना) अस्थायी अंतःस्थापित और हटाए गए तालिकाओं तक पहुँच के माध्यम से किया जाता है। पोस्टग्रेएसक्यूएल ने 1997 में ट्रिगर्स के लिए समर्थन पेश किया। एसक्यूएलः 2003 में निम्नलिखित कार्यक्षमता पहले पोस्टग्रेएसक्यूएल में लागू नहीं की गई थीः एसक्यूएल ट्रिगर्स को विशिष्ट कॉलम के अपडेट पर फायर करने की अनुमति देता है; पोस्टग्रेएसक्यूएल के संस्करण 9 के रूप में यह सुविधा पोस्टग्रेएसक्यूएल में भी लागू की गई है। मानक चयन, आई. एन. एस. ई. आर. टी., अद्यतन के अलावा कई एस. क्यू. एल. कथनों के निष्पादन की अनुमति देता है, जैसे कि ट्रिगर कार्रवाई के रूप में क्रिएट टेबल। यह क्रिएट टेबल को कॉल करने के लिए एक संग्रहीत प्रक्रिया या कार्य बनाने के माध्यम से किया जा सकता है। सारांशः टेबल पर CREATE TRIGGER NAME {BEFORE। AFTER} {EVENT [OR.]} [प्रत्येक के लिए] [ROW। STATEMENT] EXECUTE PROCEEDURE FUNCNAME (तर्क) फायरबर्ड फायरबर्ड कई पंक्ति-स्तर का समर्थन करता है, पहले या बाद में, INSERT, UPDATE, DELETE (या इसके किसी भी संयोजन) प्रति टेबल ट्रिगर्स, जहां वे हमेशा डिफ़ॉल्ट टेबल परिवर्तनों के अलावा होते हैं, और एक दूसरे के सापेक्ष ट्रिगर्स का क्रम निर्दिष्ट किया जा सकता है जहां यह अन्यथा अस्पष्ट होगा (स्थिति खंड)। दृश्यों पर भी ट्रिगर मौजूद हो सकते हैं, जहां वे हमेशा ट्रिगर के बजाय होते हैं, जो डिफ़ॉल्ट अद्यतन दृश्य तर्क की जगह लेते हैं। (संस्करण 2.1 से पहले, अपडेटेबल माने जाने वाले दृश्यों पर ट्रिगर्स डिफ़ॉल्ट तर्क के अलावा चलेंगे।) फायरबर्ड उत्परिवर्तित टेबल अपवादों (ओरेकल की तरह) को नहीं बढ़ाता है, और ट्रिगर्स डिफ़ॉल्ट रूप से घोंसले और आवश्यकता के अनुसार पुनरावृत्ति दोनों करेंगे (एसक्यूएल सर्वर घोंसले बनाने की अनुमति देता है लेकिन डिफ़ॉल्ट रूप से पुनरावृत्ति नहीं करता है।) फायरबर्ड के ट्रिगर्स नए और पुराने संदर्भ चर (अंतःस्थापित और हटाए गए टेबल नहीं) का उपयोग करते हैं और ट्रिगर के वर्तमान उपयोग को इंगित करने के लिए अपडेटिंग, इनसर्टिंग और डिलीटिंग फ्लैग प्रदान करते हैं। {CREATE। RECRIETE। ALTER} ट्राइगर नाम के लिए {तालिका का नाम। व्यू नाम] [ACTIVE। INACTIVE] {BEFORE। AFTER} {INSERT [OR UPDATE] [OR DELETE]। UPDATE [OR INSERT] [OR DELETE]। DELETE [OR UPDATE] [OR INSERT]] [OR INSERT] [OR INSERT] [OR INSERT] [OR INSERT] [OR INSERT] [OR INSERT] [OR UPDATE] [OR UPDATE] [OR INSERT] [OR INSERT] [OR INSERT] यदि ट्रांजैक्शन कमिट ट्रिगर में कोई अपवाद उठाया जाता है, तो ट्रिगर द्वारा अब तक किए गए परिवर्तनों को वापस ले लिया जाता है और क्लाइंट आवेदन को सूचित किया जाता है, लेकिन लेनदेन सक्रिय रहता है जैसे कि कभी भी कमिट का अनुरोध नहीं किया गया था; क्लाइंट आवेदन परिवर्तन करना और फिर से अनुरोध करना जारी रख सकता है। डाटाबेस ट्रिगरक लेल वाक्यविन्यासः {CREATE। RECREATE। CREATE or ALTER} ट्रिगरक नाम [ACTIVE। INACTIVE] ऑन [कनेक्ट। डिस्कनेक्ट। ट्रांसेक्शन स्टार्ट। ट्रांसेक्शन कमिट। ट्रांसेक्शन रोलबैक] [पोजीशन एन] जेना शुरू भेल। माइएसक्यूएल/मारियाडीबी डीबीएमएसमे ट्रिगरक लेल माइएसक्यूएल/मारियाडीबी लिमिटेड समर्थन 2005मे शुरू कयल गेल माइएसक्यूएलक 5म संस्करणमे जोड़ल गेल छल। संस्करण 8 तक, वे डी. डी. एल. (डेटा डेफिनिशन लैंग्वेज) ट्रिगर्स और डी. एम. एल. (डेटा मैनिपुलेशन लैंग्वेज) ट्रिगर्स के लिए अनुमति देते हैं। वे ट्रिगर्स को परिभाषित करने के लिए किसी भी प्रकार के डी. डी. एल. ट्रिगर (बाद या पहले) का उपयोग करने की भी अनुमति देते हैं। इन्हें CREATE TRIGGER खंड का उपयोग करके बनाया जाता है और DROP TRIGGER खंड का उपयोग करके हटा दिया जाता है। किसी घटना पर बुलाए गए कथन को प्रत्येक पंक्ति के लिए खंड के बाद परिभाषित किया जाता है, जिसके बाद एक मुख्य शब्द (सेट या बी. ई. जी. आई. एन.) होता है, जो इंगित करता है कि आगे जो होता है वह क्रमशः एक अभिव्यक्ति है या एक कथन। वितरित प्रणालियों के लिए IBM DB2 जिसे LUW के लिए DB2 के रूप में जाना जाता है (LUW का अर्थ है लिनक्स, यूनिक्स, विंडोज) तीन ट्रिगर प्रकारों का समर्थन करता हैः ट्रिगर से पहले, ट्रिगर के बाद और ट्रिगर के बजाय। कथन स्तर और पंक्ति स्तर दोनों ट्रिगर समर्थित हैं। यदि टेबल पर एक ही ऑपरेशन के लिए अधिक ट्रिगर हैं तो फायरिंग ऑर्डर ट्रिगर निर्माण डेटा द्वारा निर्धारित किया जाता है। संस्करण 9.7 से आई. बी. एम. डी. बी. 2 स्वायत्त लेनदेन का समर्थन करता है। ट्रिगर से पहले डेटा की जाँच करना और यह तय करना है कि ऑपरेशन की अनुमति दी जानी चाहिए या नहीं। यदि ट्रिगर से पहले से अपवाद फेंक दिया जाता है तो ऑपरेशन को निरस्त कर दिया जाता है और कोई डेटा नहीं बदला जाता है। डी. बी. 2 में ट्रिगर्स को केवल पढ़ने से पहले-आप ट्रिगर्स से पहले डेटा को संशोधित नहीं कर सकते हैं। अनुरोधित परिवर्तन किए जाने के बाद ट्रिगर्स को पोस्ट प्रोसेसिंग के लिए डिज़ाइन किया गया है। ट्रिगर के बाद डेटा को टेबल में लिखा जा सकता है और कुछ अन्य डेटाबेस के विपरीत आप टेबल सहित किसी भी टेबल में लिख सकते हैं जिस पर ट्रिगर काम करता है। प्रेरक के बजाय विचारों को लिखने योग्य बनाने के लिए होते हैं। ट्रिगर्स को आमतौर पर एस. क्यू. एल. पी. एल. भाषा में क्रमादेशित किया जाता है। SQLite CREATE [TEMP। TEMPORARY] TRIGGER [यदि अस्तित्व में नहीं है] [डेटाबेस _ नाम।] ट्रिगर _ नेम [BEFORE। AFTER। INSTEAD OF] {DELETE। INSERT। UPDATE [OF column _ नाम [, column _ नाम].]} ऑन {टेबल _ नाम। व्यू _ नाम} [प्रत्येक ROW के लिए] [जब शर्त अनिवार्य है] शुरू करें। एंड SQLite केवल पंक्ति-स्तरीय ट्रिगर्स का समर्थन करता है, न कि कथन-स्तरीय ट्रिगर्स का। अद्यतन दृश्य, जो एस. क्यू. एल. आई. टी. में समर्थित नहीं हैं, उन्हें आई. एन. एस. टी. ई. ए. डी. ऑफ ट्रिगर्स के साथ अनुकरण किया जा सकता है। एक्स. एम. एल. डेटाबेस गैर-संबंधपरक डेटाबेस में ट्रिगर्स के कार्यान्वयन का एक उदाहरण सेडना हो सकता है, जो एक्सक्वेरी पर आधारित ट्रिगर्स के लिए समर्थन प्रदान करता है। सेडना में ट्रिगर्स को एसक्यूएलः 2003 ट्रिगर्स के अनुरूप बनाया गया था, लेकिन मूल रूप से एक्सएमएल क्वेरी और अपडेट भाषाओं (एक्सपाथ, एक्सक्वेरी और एक्सएमएल अपडेट भाषा) पर आधारित था। सेडना में एक ट्रिगर डेटाबेस में संग्रहीत एक्स. एम. एल. दस्तावेज़ के किसी भी नोड पर सेट किया जाता है। जब इन नोड्स को अद्यतन किया जाता है, तो ट्रिगर स्वचालित रूप से अपने शरीर में निर्दिष्ट XQuery प्रश्नों और अद्यतनों को निष्पादित करता है। उदाहरण के लिए, निम्नलिखित ट्रिगर व्यक्ति नोड हटाने को रद्द कर देता है यदि इस व्यक्ति द्वारा संदर्भित कोई खुली नीलामी होती हैः प्रत्येक कार्य के लिए दस्तावेज़ ("नीलामी")/साइट/व्यक्ति को हटाने से पहले ट्रिगर "ट्रिगर 3" बनाएँ (यदि मौजूद है ($WHERE// ओपन _ ऑक्शन/बोली लगाने वाला/व्यक्ति/@person = $OLD/@id) तो () अन्यथा $OLD;} पंक्ति और कथन स्तर ट्रिगर्स यह समझने के लिए कि ट्रिगर व्यवहार कैसे काम करता है, आपको दो मुख्य प्रकार के ट्रिगर्स के बारे में पता होना चाहिए; ये पंक्ति और कथन स्तर ट्रिगर्स हैं। दोनों के बीच का अंतर यह है कि ट्रिगर के भीतर कोड को कितनी बार निष्पादित किया जाता है, और किस समय। मान लीजिए कि आपके पास एक ट्रिगर है जिसे एक निश्चित मेज पर अद्यतन पर कॉल करने के लिए बनाया गया है। पंक्ति स्तर के ट्रिगर्स अद्यतन से प्रभावित प्रत्येक पंक्ति के लिए एक बार निष्पादित होंगे। यह ध्यान रखना महत्वपूर्ण है कि यदि कोई पंक्ति अद्यतन आदेश से प्रभावित नहीं होती है, तो ट्रिगर ट्रिगर के भीतर किसी भी कोड को निष्पादित नहीं करेगा। अद्यतन से कितनी पंक्तियाँ प्रभावित होती हैं, इसकी परवाह किए बिना कथन स्तर के ट्रिगर्स को एक बार कॉल किया जाएगा। यहाँ यह ध्यान रखना महत्वपूर्ण है कि भले ही UPDATE कमांड ने किसी भी पंक्ति को प्रभावित नहीं किया हो, ट्रिगर के भीतर कोड अभी भी एक बार निष्पादित किया जाएगा। BEFORE और AFTER विकल्पों का उपयोग करके निर्धारित करें कि ट्रिगर कब कॉल किया जाता है। मान लीजिए कि आपके पास एक ट्रिगर है जिसे एक निश्चित टेबल पर आई. एन. एस. ई. आर. टी. पर बुलाया जाता है। यदि आपका ट्रिगर BEFORE विकल्प का उपयोग कर रहा है, तो ट्रिगर के भीतर कोड को टेबल में INSERT होने से पहले निष्पादित किया जाएगा। BEFORE ट्रिगर का एक सामान्य उपयोग INSERT के इनपुट मूल्यों को सत्यापित करना है, या तदनुसार मूल्यों को संशोधित करना है। मान लीजिए कि हमारे पास एक ट्रिगर है जो इसके बजाय ए. एफ. टी. आर. का उपयोग करता है। ट्रिगर के भीतर कोड को टेबल पर आई. एन. एस. ई. आर. टी. होने के बाद निष्पादित किया जाता है। इस ट्रिगर का एक उदाहरण उपयोग किए गए परिवर्तनों पर नज़र रखते हुए, डेटाबेस में किसने सम्मिलित किया है, इसका एक ऑडिट इतिहास बनाना है। इन विकल्पों का उपयोग करते समय आपको कुछ बातों का ध्यान रखना होगा। BEFORE विकल्प आपको तालिकाओं को संशोधित करने की अनुमति नहीं देता है, इसलिए इनपुट सत्यापन एक व्यावहारिक उपयोग है। ए. एफ. टी. आर. ट्रिगर्स का उपयोग करने से आप ऑडिट हिस्ट्री टेबल में डालने जैसी तालिकाओं को संशोधित कर सकते हैं। यह निर्धारित करने के लिए कि क्या यह कथन या पंक्ति स्तर है, एक ट्रिगर बनाते समय बस एक पंक्ति स्तर के लिए प्रत्येक पंक्ति खंड को शामिल करें, या कथन स्तर के लिए खंड को छोड़ दें। अपने ट्रिगर के भीतर अतिरिक्त INSERT/UPDATE/DELETE आदेशों का उपयोग करने से सावधान रहें, क्योंकि ट्रिगर पुनरावृत्ति संभव है, जिससे अवांछित व्यवहार हो सकता है। नीचे दिए गए उदाहरणों में प्रत्येक ट्रिगर एक अलग तालिका को संशोधित कर रहा है, यह देखकर कि क्या संशोधित किया जा रहा है, आप कुछ सामान्य अनुप्रयोगों को देख सकते हैं जब विभिन्न ट्रिगर प्रकारों का उपयोग किया जाता है। निम्नलिखित एक पंक्ति स्तर ट्रिगर का एक ओरेकल वाक्यविन्यास उदाहरण है जिसे प्रभावित प्रत्येक पंक्ति के लिए एक अद्यतन के बाद कहा जाता है। फोन बुक डेटाबेस के अद्यतन पर इस ट्रिगर को बुलाया जाता है। जब ट्रिगर को कॉल किया जाता है तो यह फ़ोन _ बुक _ ऑडिट नामक एक अलग तालिका में एक प्रविष्टि जोड़ता है। अनुक्रम जैसी योजना वस्तुओं का लाभ उठाने में सक्षम ट्रिगर्स पर भी ध्यान दें, इस उदाहरण में audit_id_sequence.nexVal का उपयोग फ़ोन _ बुक _ ऑडिट टेबल में अद्वितीय प्राथमिक कुंजी उत्पन्न करने के लिए किया जाता है। प्रत्येक पंक्ति के लिए फोन बुक पर अद्यतन करने के बाद फोन बुक ऑडिट शुरू करें (ऑडिट आईडी, ऑडिट चेंज, ऑडिट नाम, ऑडिट एफ नाम, ऑडिट ओल्ड फोन नंबर, ऑडिट न्यू फोन नंबर, ऑडिट डेट) मूल्य (audit_id_sequence.nextVal, 'अपडेट',: OLD.last_name,: OLD.first_name,: OLD.phone_number,: NEW.phone_number, SYSDATE); अंत; अब अंतिम नाम 'जोन्स' वाले लोगों के लिए फोन बुक टेबल पर अद्यतन कॉल करें। अद्यतन फ़ोन _ बुक सेट फ़ोन _ नंबर = '111-111-1111' कहाँ अंतिम नाम = 'जोन्स'; ध्यान दें कि फ़ोन _ नंबर _ ऑडिट तालिका अब दो प्रविष्टियों के साथ भरी हुई है। ऐसा डेटाबेस में 'जोन्स' के अंतिम नाम के साथ दो प्रविष्टियों के होने के कारण है। चूंकि अद्यतन ने दो अलग-अलग पंक्ति मूल्यों को संशोधित किया, इसलिए बनाए गए ट्रिगर को दो बार कॉल किया गया; प्रत्येक संशोधन के बाद एक बार। आफ्टर-स्टेटमेंट-लेवल ट्रिगर एक ओरेकल वाक्यविन्यास ट्रिगर जिसे फ़ोन _ बुक टेबल पर एक अद्यतन के बाद बुलाया जाता है। जब ट्रिगर को कॉल किया जाता है तो यह फ़ोन _ बुक _ एडिट _ हिस्ट्री टेबल में क्रिएट या रिप्लैस ट्रिगर फ़ोन _ बुक _ हिस्ट्री में फोन _ बुक BEGIN INSERT INT फोन _ बुक _ एडिट _ हिस्ट्री (ऑडिट _ हिस्ट्री _ आईडी, यूजरनेम, मॉडिफिकेशन, एडिट _ डेट) वैल्यू (audit_history_id_sequence.nextVal, USER, 'अपडेट', SYSSDATE); एंड; अब उपरोक्त उदाहरण के समान ही अपडेट कर रहा है, हालांकि इस बार स्टेटमेंट लेवल ट्रिगर के साथ। अद्यतन फ़ोन _ बुक सेट फ़ोन _ नंबर = '111-111-1111' कहाँ अंतिम नाम = 'जोन्स'; परिणाम से पता चलता है कि ट्रिगर को केवल एक बार कॉल किया गया था, भले ही अद्यतन ने दो पंक्तियों को बदल दिया हो। प्रत्येक पंक्ति-स्तर के ट्रिगर से पहले यह उदाहरण प्रत्येक पंक्ति से पहले के ट्रिगर को प्रदर्शित करता है जो WHEN सशर्त का उपयोग करके INSERT को संशोधित करता है। यदि अंतिम नाम 10 अक्षरों से बड़ा है, तो एस. यू. बी. एस. टी. आर. फ़ंक्शन का उपयोग करके हम अंतिम नाम कॉलम मूल्य को एक संक्षिप्त नाम में बदल देते हैं। प्रत्येक पंक्ति के लिए फ़ोन _ बुक पर इनसर्ट करने से पहले फ़ोन _ बुक _ इन्सर्ट करें (लंबाई (new.last_name)> 10) शुरू करेंः new.last_name: = सबस्टर (: new.last_name, 0,1); अंत; अब बड़े नाम वाले किसी व्यक्ति का इनसर्ट कर रहे हैं। आई. एन. एस. ई. आर. टी. आई. एन. टी. ओ. फोन _ बुक वैल्यूज (6, 'वेरीवेरीलोंगलास्टनेम', 'एरिन', 'मिनियापोलिस', 'एम. एन.', '989 यूनिवर्सिटी ड्राइव', '123-222-4456', 55408, टी. ओ. डी. ए. टी. ('11/21/1991', 'एम. एम./डी. डी./वाई. वाई. वाई. वाई'); ट्रिगर ने उपरोक्त परिणाम के अनुसार काम किया, आई. एन. एस. ई. आर. टी. के मूल्य को निष्पादित करने से पहले संशोधित किया। बिफोर-स्टेटमेन्ट-लेवल ट्रिगर डेटाबेस प्रतिबंधों को लागू करते समय बिफोर स्टेटमेन्ट ट्रिगर का उपयोग करना विशेष रूप से उपयोगी होता है। यह उदाहरण दर्शाता है कि टेबल फोन _ बुक पर "सॉम्यूसर" नाम के किसी व्यक्ति पर प्रतिबंध कैसे लगाया जाए। CREATE OR REPLACE TRIGGER Hauschbc INSERT ON से पहले SOMEUSER.phone_book BEGIN REISE _ APLICATION _ ERROR (num =>-20050, msg => 'त्रुटि संदेश यहाँ जाता है। '); समाप्त; अब, जब किसी भी आई. एन. एस. ई. आर. टी. का प्रयास करने के बाद "एस. ओ. एम. ई. यू. एस. ई. आर". लॉग इन किया जाता है तो यह त्रुटि संदेश दिखाएगाः एस. क्यू. एल. त्रुटिः ओ. आर. ए.-20050: त्रुटि संदेश यहाँ जाता है। इस तरह की कस्टम त्रुटियों का इस बात पर प्रतिबंध है कि संख्या चर को किस रूप में परिभाषित किया जा सकता है। कई अन्य पूर्व-परिभाषित त्रुटियों के कारण यह चर-2000 से-209 की सीमा में होना चाहिए। संदर्भ बाहरी लिंक माइक्रोसॉफ्ट एसक्यूएल सर्वर ड्रॉप ट्रिगर माईएसक्यूएल डेटाबेस ट्रिगर्स माईएसक्यूएल डीबी क्रिएट ट्रिगर्स डीबी2 क्रिएट ट्रिगर स्टेटमेंट ओरेकल क्रिएट ट्रिगर पोस्टग्रेएसक्यूएल क्रिएट ट्रिगर ओरेकल म्यूटेटिंग टेबल प्रॉब्लम्स विद डिलेट कैस्केड एसक्यूलाइट क्वेरी लैंग्वेजः क्रिएट ट्रिगर ओरेकल डॉक्यूमेंटेशन ऑन ट्रिगर्स डेटाबेस मैनेजमेंट सिस्टम (कंप्यूटिंग) लेख उदाहरण एसक्यूएल कोड के साथ