प्रश्न को सुनने से मुझे दो पहलुओं के बारे में सोचना पड़ता है:
ASPECT # 1: कार्यों को अनुमानित माना जाता है
यदि ऐसा है, तो इसका मतलब यह है कि किसी फ़ंक्शन को दिए गए सेट पैरामीटर के लिए लगातार एक ही रिटर्न डेटा पेश करना चाहिए, NO MATTER WHEN YOU CALL THE FUNCTION।
अब, एक फ़ंक्शन की कल्पना करें जो फ़ंक्शन में स्टेटिक एसक्यूएल के आधार पर दिन के अलग-अलग समय पर डेटा इकट्ठा करने के कारण एक अलग उत्तर का उत्पादन करता है। एक मायने में, अगर आप हर बार तालिकाओं और स्तंभों के एक ही सेट को क्वेरी करते हैं, तो इसे अभी भी डीटेरेमिनिस्टिक माना जा सकता है।
क्या होगा यदि आप डायनामिक एसक्यूएल के माध्यम से किसी फ़ंक्शन की अंतर्निहित तालिकाओं को बदल सकते हैं? आप एक डीटेलियम फ़ंक्शन की परिभाषा का उल्लंघन कर रहे हैं।
ध्यान दें कि MySQL ने इस विकल्प को /etc/my.cnf में जोड़ा है
log-bin-trust-function-creators
हालांकि यह कहने के लिए एक निरीक्षण हो सकता है, लेकिन यह फ़ंक्शन को बाइनरी लॉग में डेटा लिखने की अनुमति दी जा सकती है ताकि डीटेरिमिनिस्टिक संपत्ति को कड़ाई से लागू किया जा सके।
ASPECT # 2: ट्रिगर को वापस रोल करने में सक्षम होना चाहिए
- क्या आप एक फ़ंक्शन के रूप में सभी समान व्यवहारों के साथ एक ट्रिगर की कल्पना कर सकते हैं और फिर मिक्स में डायनेमिक SQL शुरू कर सकते हैं?
- क्या आप सोच सकते हैं कि MVCC को आधार तालिका में लागू करने के बाद डायनेमिक SQL के विरुद्ध MVCC (मल्टीवर्जन कॉन्सुर्रेसी कंट्रोल) लगाने की कोशिश ट्रिगर के लिए थी?
आपके पास अनिवार्य रूप से डेटा होगा जो केवल MVCC में चतुर्भुज (यहां तक कि तेजी से) बढ़ता है। ट्रिगर्स के साथ एसक्यूएल के रोलबैक के प्रबंधन की प्रक्रिया जो गैर-डीटामिनिस्टिक हो सकती है, कम से कम कहने के लिए, जटिल रूप से जटिल होगी।
इन दो पहलुओं के प्रकाश में, मुझे यकीन है कि MySQL डेवलपर्स ने इन चीजों के बारे में सोचा था और प्रतिबंधों को लागू करके उन्हें जल्दी से खारिज कर दिया था।
तो, प्रक्रियाओं के लिए प्रतिबंध क्यों उठाएं? सीधे शब्दों में कहें, तो DETERMINISTIC गुणों या रोलबैक पर कोई चिंता नहीं है।