ऐसे कई कथन हैं जो एक अंतर्निहित प्रतिबद्धता का कारण बनते हैं, और इनमें से कोई भी संग्रहीत फ़ंक्शन या ट्रिगर के अंदर उपयोग नहीं किया जा सकता है, या एक संग्रहीत कार्यविधि में जिसे संग्रहीत फ़ंक्शन या ट्रिगर से कॉल किया जाता है, क्योंकि यह वास्तव में इसके शुद्ध प्रभाव में कोई भिन्न नहीं है।
एक पल का प्रतिबिंब इसका कारण बताता है:संग्रहीत कार्य (और ट्रिगर) क्वेरी चलने के दौरान निष्पादित होते हैं . वे हमेशा, बिना किसी अपवाद के, क्वेरी शुरू होने के बाद निष्पादित करना शुरू करते हैं, और क्वेरी समाप्त होने से पहले निष्पादन समाप्त करते हैं। वे एकल क्वेरी के निष्पादन के दौरान कई बार भी चल सकते हैं, खासकर जब क्वेरी में कई पंक्तियाँ शामिल हों।
उस प्रकाश में, इसका कोई मतलब नहीं होगा यदि यह संभव हो COMMIT
एक लेन-देन जबकि एक ही क्वेरी चल रही है... और यही है START TRANSACTION
करता है, यदि कोई लेन-देन चल रहा है -- यह परोक्ष रूप से वर्तमान लेन-देन करता है, और एक नया प्रारंभ करता है।
यह एक संग्रहीत प्रक्रिया में ठीक है, जब तक कि आप इसे किसी अन्य क्वेरी के बीच में नहीं बुला रहे हैं (एक संग्रहीत फ़ंक्शन या ट्रिगर के माध्यम से, जो किसी अन्य क्वेरी के बीच में एक प्रक्रिया को लागू करने का एकमात्र तरीका है) लेकिन क्या कर रहा है आप यहां जो कर रहे हैं वह समर्थित नहीं है... भले ही कोई लेन-देन नहीं चल रहा हो, फिर भी चल रही क्वेरी के बीच में लेन-देन शुरू करना संभव नहीं है।
http://dev.mysql.com/doc/refman /5.6/hi/implicit-commit.html