2009-11-05 4 views
7

क्या एक क्वेरी से ऑटो incremented आईडी प्राप्त करना संभव है जो एकाधिक पंक्तियों को सम्मिलित करता है? उदाहरण:php mysql_insert_id?

तालिका में प्रवेश (col1, col2) मूल्य (1, 2), (3, 4), (5, 6);

वैकल्पिक रूप से, तालिका में कुछ भी डालने के बिना अगला ऑटो वृद्धि मूल्य खोजने का कोई तरीका है?

धन्यवाद

उत्तर

4

जहाँ तक मुझे पता के रूप में auto_increment आईडी बीच अंतराल को भरने नहीं करता है और ऑपरेशन परमाणु है। तो आप मान सकते हैं कि वे एक पंक्ति में होंगे।

+1

माईएसक्ल ऑटो वृद्धि वृद्धि ऑफसेट का समर्थन करता है (यह प्रतिकृति में अधिक आम है) इसलिए लगातार आईडी सभी वातावरण में गारंटी नहीं है। – webbiedave

+0

आप माइस्क्ल में [निम्नलिखित परिस्थितियों] (http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html) के तहत लगातार आईडी को सुरक्षित रूप से मान सकते हैं: आप इनो डीबी का उपयोग कर रहे हैं, innodb_autoinc_lock_mode 0 या 1 (डिफ़ॉल्ट) पर सेट है। –

4

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

आप एक ही INSERT बयान का उपयोग कर कई पंक्तियां सम्मिलित हैं, LAST_INSERT_ID() पहले डाला पंक्ति केवल के लिए उत्पन्न मान देता है।

तो नहीं, तुम नहीं सभी आईडी आसानी से प्राप्त कर सकते हैं, लेकिन आप यह मान सकते हैं है कि वे निरंतर कर रहे हैं। आपको कभी मान्यताओं पर भरोसा नहीं करना चाहिए। ऐसा लगता है कि आप अगले id अनुमान लगाना चाहते हैं जो आपके थोक सम्मिलन के बाद आएगा? यदि ऐसा है, तो यह भी प्रयास न करें और ऐसा करने का एक और तरीका सोचें जो आप करना चाहते हैं। :)

0

अगले auto_increment आईडी आप उपयोग कर सकते हैं पाने के लिए:

SELECT auto_increment FROM information_schema.tables WHERE table_name = 'table-you-want-to-check'; 

हालांकि, अगर आप auto_increment आईडी या last_insert_id() अपने कोड के तर्क में पर निर्भर नहीं कर सकते हैं। उदाहरण के लिए, मान लें कि दो लोग, ए & बी, एक ही पल के करीब आपके डीबी में प्रश्न जोड़ रहे हैं और आप व्यक्ति के प्रश्न की आईडी निर्धारित करने के लिए last_insert_id() का उपयोग कर रहे हैं। क्या होता है जब वे दोनों एक ही समय में अपना प्रश्न सबमिट करते हैं? व्यक्ति ए या बी से last_insert_id() है?

इस समस्या को दूर करने का एक तरीका ऑटो वृद्धिशील आईडी के स्थान पर या इसके अतिरिक्त "पूर्व परिभाषित" आईडी या guid का उपयोग करना है।