/ / mysql बिना किसी ट्रिगर के अपडेट के बाद यदि अशक्त हो तो पंक्ति हटाएं - mysql, sql, database, triggers

MySQL हटाएं पंक्ति के बिना अद्यतन के बाद सभी शून्य - mysql, sql, डेटाबेस, ट्रिगर्स

एक निश्चित तालिका के लिए, यदि कोई फ़ील्ड अपडेट की जाती हैउस पंक्ति के लिए नल और सभी फ़ील्ड अब Null हैं मैं इस पंक्ति को हटाना चाहता हूं। मैं समझता हूं कि इसे ट्रिगर के साथ किया जा सकता है, लेकिन मैंने सुना है कि ट्रिगर को जब भी संभव हो बचना चाहिए। क्या इसका एक और समाधान है जो ट्रिगर से बचता है, और इसकी लागत कम है? इस मामले में ट्रिगर कितना महंगा होगा (क्या यह दो प्रश्नों को चलाने से कम महंगा है?)

उत्तर:

जवाब के लिए 2 № 1

आपके पास तीन विकल्प हैं:

  1. हर अपडेट के बाद TABLE WHAIL FIELD == NULL में DELETE से डालें

  2. एक ट्रिगर का उपयोग करें

  3. संग्रहीत प्रक्रिया के माध्यम से सभी अपडेट को केंद्रीकृत करें ताकि आप रिकॉर्ड को अपडेट करने पर एसपी को कॉल कर सकें, जो तब # 1 में DELETE FROM कमांड को कॉल कर सकते हैं।


जवाब के लिए 0 № 2

जहां भी संभव हो ट्रिगर को टाला नहीं जाना चाहिए। उन्हें सिर्फ विवेक के साथ इस्तेमाल किया जाना चाहिए।

सबसे पहले, कई प्रणालियों में जो मुझे शामिल किया गया हैके साथ, सभी डीएमएल संचालन संग्रहीत प्रक्रियाओं में एम्बेडेड हैं। असल में, एक ट्रिगर जो कुछ भी करेगा वह संग्रहीत कार्यविधि में है - साथ ही अन्य कार्यक्षमता जैसे लॉगिंग।

दूसरा, यदि आप एक समस्या है कि एक की आवश्यकता हैट्रिगर, फिर एक ट्रिगर का उपयोग करें। उदाहरण के लिए, Oracle 12C से पहले, आपको ऑटो-इन्क्रिमिंग प्राथमिक कुंजी जोड़ने के लिए ट्रिगर की आवश्यकता थी। हर तरह से यह करो, अगर वह है जो आपको चाहिए।

डॉन "टी ओवरबोर्ड"। लेकिन आपकी विशेष समस्या एक उदाहरण की तरह लगती है जहां ट्रिगर काफी उपयोगी हो सकता है।

एहसास है कि वहाँ अन्य समाधान हो सकता है। उदाहरण के लिए, शायद एक दृश्य वह होगा जो आप चाहते हैं:

create view v_t as
select t.*
from t
where col1 is not null or col2 is not null or . . .;

यह ट्रिगर के सभी ओवरहेड को बचाएगा। यदि तालिका बहुत बड़ी हो गई, तो आप सभी को हटा सकते हैं-NULL एक अनुसूचित नौकरी का उपयोग कर पंक्तियाँ।