2008-10-03 13 views
8

के बारे में आसान mysql प्रश्न mysql में, जब मैं autoincrementing है, तो मैं एक सम्मिलित ऑपरेशन के लिए उपयोग की जाने वाली प्राथमिक कुंजी कैसे प्राप्त करूं।प्राथमिक कुंजी और एक सम्मिलित

असल में, मैं चाहता हूं कि जब नया कथन पूरा हो जाए तो नया स्वत: संक्रमित मान वापस लौटाया जाए।

धन्यवाद!

+0

स्पष्टीकरण: कोड ने अंतिम_insert_id डाला है। इन बयानों में से दो एक ही समय में लगभग निष्पादित और कार्यकारी आदेश डालने # 1 डालने # 2 last_insert_id # 1 कम्प्लिट्स में बदल जाता है और डालने # 2 last_insert_id # 2 कम्प्लिट्स से आईडी वापस आती है और डालने # से आईडी रिटर्न 2 क्या ऐसा हो सकता है? – MPX

उत्तर

12

आपकी स्पष्टीकरण टिप्पणी कहती है कि आप यह सुनिश्चित करने में रुचि रखते हैं कि LAST_INSERT_ID() कोई अन्य समवर्ती INSERT होने पर गलत परिणाम नहीं देता है। बाकी आश्वासन दिया कि अन्य समवर्ती गतिविधि के बावजूद LAST_INSERT_ID() का उपयोग करना सुरक्षित है। LAST_INSERT_ID() वर्तमान सत्र के दौरान उत्पन्न सबसे हालिया आईडी लौटाता है। प्रत्येक में

  1. ओपन दो खोल खिड़कियां, चलाने mysql ग्राहक और डेटाबेस से कनेक्ट:

    तुम खुद कर सकते हैं।

  2. शैल 1: AUTO_INCREMENT कुंजी वाली तालिका में INSERT।
  3. शैल 1: SELECT LAST_INSERT_ID(), परिणाम देखें।
  4. शैल 2: उसी तालिका में प्रवेश करें।
  5. शैल 2: का चयन करें LAST_INSERT_ID(), परिणाम खोल 1.
  6. शैल 1 से अलग देखें: फिर से चयन LAST_INSERT_ID() , पहले परिणाम की पुनरावृत्ति को देखते हैं।

यदि आप इसके बारे में सोचते हैं, तो यह एकमात्र तरीका है जो समझ में आता है। ऑटो-वृद्धिशील कुंजी तंत्र का समर्थन करने वाले सभी डेटाबेस इस तरह कार्य करना चाहिए। यदि परिणाम अन्य क्लाइंट्स के साथ एक रेस हालत पर निर्भर करता है, तो संभवत: INSERTING, तो आपके वर्तमान सत्र में अंतिम डाला गया आईडी मान प्राप्त करने का कोई भरोसेमंद तरीका नहीं होगा।

+0

धन्यवाद! वास्तव में मैं क्या चाहता था। इस सहायक पोस्ट के लिए – MPX

+0

@ बिल करविन थक्स बहुत कुछ। एक प्रश्न: एक बहु थ्रेड वाले वातावरण में कहें कि आखिरी ऑटो इंक कुंजी मान 10 था .. फिर खोल 1 का धागा डालने में विफल रहता है और उसी पल में खोल दो डालने वाला होता है .. last_insert_id() क्या होगा? 11 या 12?thx बहुत – shadesco

+0

@ शेडस्को: MySQL के आपके संस्करण पर निर्भर करता है, लेकिन 5.1 में और बाद में इनो डीबी के साथ, पहला सत्र ऑटो-इंक में वृद्धि करेगा और वह मान खो जाएगा। फिर दूसरा सत्र 12 प्राप्त होगा। Http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html –

0

[अधिकतम (primary_key_column_name) का चयन TABLE_NAME से] आह नहीं nessecarily। मैं एक MySQL लड़का नहीं हूं लेकिन अंतिम पूर्ण कार्यवाही के लिए अंतिम डालने वाली आईडी प्राप्त करने का एक विशिष्ट तरीका है जो इससे थोड़ा अधिक मजबूत है। क्या होगा यदि आप टेबल पर लिखने और पूछताछ के बीच एक सम्मिलित हुआ है? मुझे पता है क्योंकि यह मुझे पहले कई चांद चुरा लिया (तो हाँ यह होता है)। यदि अन्य सभी मैनुअल को पढ़ने में विफल रहता है: http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

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