2011-11-21 17 views
8

मुझे उत्सुकता है कि अगर मैं NOT NULL, FOREIGN KEY, UNIQUE, CHECK बाधाओं और BEFORE ट्रिगर्स को सत्यापित करने के किसी विशेष आदेश पर भरोसा कर सकता हूं।क्या एसक्यूएल मानक बाधा सत्यापन के आदेश को निर्दिष्ट करता है और फायरिंग ट्रिगर करता है?

अनुभव से मुझे पता है कि MySQL पहले NOT NULL की जांच करता है, फिर BEFORE ट्रिगर लॉन्च करता है, और फिर UNIQUE बाधाओं को चेक करता है। BEFORE ट्रिगर के बाद ओरेकल NOT NULL चेक करता है (मुझे विश्वास है कि SQLServer वही करता है, लेकिन याद नहीं है)। क्या मानक आदेश के बारे में कुछ भी कहता है या यह पूरी तरह से डीबी विक्रेता तक है?

+0

ओरेकल ** नहीं ** ** ट्रिगर्स के बाद तक शून्य न करें। इससे 'पहले' ट्रिगर को मानों को बदलने की अनुमति मिलती है जैसे कि वे अब शून्य नहीं हैं। –

+0

@ शैनन सेवरेंस: हाँ, क्षमा करें, मैं mysql के बारे में सोच रहा था ... फिक्स्ड – a1ex07

+1

आप एक [ड्राफ्ट] (http://www.wiscorp.com/sql200n.zip) (विकिपीडिया से लिया गया लिंक) डाउनलोड कर सकते हैं हालिया मानक और इसे स्वयं देखिए (मुझे ऐसी कोई परिभाषा नहीं मिल रही है) –

उत्तर

2

यह विशेष व्यवहार bug in MySQL लगता है, और यह केवल BEFORE INSERT ट्रिगर्स को प्रभावित करता है, जबकि BEFORE UPDATE ट्रिगर्स सही तरीके से व्यवहार करते हैं।

standard (के रूप में प्रश्न टिप्पणी में लिंक किया गया) निश्चित रूप से यह स्पष्ट रूप से उल्लेख नहीं है, लेकिन यह निश्चित रूप से निहित है:

प्रत्येक राज्य परिवर्तन विज्ञान-, TECi में जे के लिए, इससे पहले कि एससीआई द्वारा सक्रिय ट्रिगर, जे को ट्रिगर करने वाली घटनाओं में से किसी भी प्रभाव से पहले निष्पादित किया जाता है। जब घटनाओं को ट्रिगर करने वाले प्रभाव प्रभावी होते हैं, तो द्वारा सक्रिय ट्रिगर्स के बाद टीईसीई के राज्य परिवर्तन निष्पादित किए जाते हैं।

एक NOT NULL त्रुटि एक INSERT या UPDATE (अर्थात ट्रिगर घटना) का हिस्सा होना चाहिए। मानक को निर्दिष्ट करने की आवश्यकता नहीं है। बिल्कुल कोई मतलब नहीं पूर्व emptively परिवर्तन का एक सेट जो अंतिम नहीं है पर बाधाओं की जाँच क्योंकि आपके BEFORE ट्रिगर दोनों को हल करने त्रुटियों और नए लोगों को शुरू करने में सक्षम है करने के लिए नहीं है।

सारांश: यह वास्तव में डीबी विक्रेता तक नहीं है क्योंकि पहले ट्रिगर के बाद बाधाओं की जांच हमेशा आवश्यक है।

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

  • कोई संबंधित समस्या नहीं^_^