समस्या यह है कि LAST_INSERT_ID(...);
एक तर्क के साथ उत्पन्न आईडी वापस नहीं करता है बल्कि इसके बजाय दिए गए मान को LAST_INSERT_ID()
की "स्मृति" में सेट करता है और इसे वापस कर देता है। इसलिए, आपके पहले निष्पादन में कोई ऑटो इंक्रीमेंटेड आईडी उत्पन्न नहीं हुई थी (आपने स्वयं मूल्य प्रदान किया था) और LAST_INSERT_ID()
वापसी 0
. अपने निम्नलिखित निष्पादनों में आप next+1
. मान सहेजते हैं LAST_INSERT_ID()
. के आंतरिक संग्रहण में , जो मान लौटाता है। इस व्यवहार का वर्णन MySQL में 12.14 सूचना कार्य
:
वास्तव में, आप LAST_INSERT_ID()
को छोड़ सकते हैं कॉल करें और इसके बिना काम करें।
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
यह पंक्ति (दिए गए मान के साथ) सम्मिलित करेगा या काउंटर बढ़ाएगा।
यदि आप किसी दिए गए वर्ष और महीने के लिए वर्तमान काउंटर चाहते हैं तो आप एक साधारण चयन कथन चलाते हैं। ध्यान रखें कि आपको लेन-देन या लॉक की आवश्यकता हो सकती है क्योंकि एक अलग क्लाइंट काउंटर को SELECT स्टेटमेंट के साथ लाने से पहले बढ़ा सकता है।