क्या मैं समझने में सही हूं कि mysql का LAST_INSERT_ID() फ़ंक्शन सम्मिलित प्रयासों के बीच रीसेट नहीं होता है (जैसे @@ पहचान एसक्यूएल-सर्वर में होती है) ... अगर तुरंत पूर्ववर्ती सम्मिलन ऑपरेशन विफल रहता है, LAST_INSERT_ID() उस कनेक्शन के अंतिम प्रविष्टि के पीके को पर किसी भी तालिका को स्वत: वृद्धिशील प्राथमिक कुंजी के साथ वापस ले जाएगा। और यदि मैं इसमें सही हूं, तो क्या यह इस कार्य के लिए सबसे मंद व्यवहार के बारे में प्रतीत नहीं होता है जिसके साथ कोई भी आ सकता है? क्या कोई mysql फ़ंक्शन नहीं है जो एसक्यूएल-सर्वर की @@ पहचान के समान व्यवहार करता है? एक से पहले तुरंत कोई नया रिकॉर्ड नहीं बनाता है, तो वह वापस लौटाएगा? वैकल्पिक रूप से, किसी को हाल ही में सम्मिलित ऑपरेशन की प्राथमिक कुंजी निश्चित रूप से कैसे पता चलता है?mysql @@ पहचान बनाम एसक्यूएल-सर्वर last_insert_id()
उत्तर
@@ पहचान आमतौर पर एसक्यूएल सर्वर में भी गलत है। इसके बजाय आपको अधिकांश मामलों में scope_identity()
का उपयोग करना चाहिए।
MySQL में, last_insert_id() का उपयोग करने के लिए सुरक्षित होना चाहिए क्योंकि एकमात्र तरीका जिसे आप इस फ़ंक्शन को सम्मिलित त्रुटि के बाद कॉल कर सकते हैं, क्या आप पहले ही सही ढंग से पकड़े गए हैं और सम्मिलित त्रुटि के लिए जिम्मेदार हैं। अन्यथा आप अभी भी कमांड प्रसंस्करण करेंगे। दूसरे शब्दों में, last_insert_id() आपकी त्रुटि-प्रबंधन प्रणाली नहीं है।
@ पैराग्राफ 2 - मुझे इस तरह से पुनर्विचार करता है कि मैं सम्मिलित कथन की संरचना कर रहा हूं ... इस मामले में जहां सम्मिलित भोजन को चुनने वाले चुनिंदा बयान पर क्लॉज निर्धारित करता है कि कोई सम्मिलन बिल्कुल होता है या नहीं। दूसरे शब्दों में, जहां क्लॉज स्थितियों के आधार पर सम्मिलन 0+ रिकॉर्ड है। मुझे लगता है कि मैं उन लोगों को सम्मिलित करने के बाहर खींच सकता हूं और सशर्त रूप से सम्मिलित कर सकता हूं। अच्छा कामकाज, लेकिन यह मेरे लिए एक कामकाज की तरह महसूस करता है। – codemonkey
आपको यह देखने के लिए जांचना होगा कि क्या सम्मिलन पहले सफल हुआ था या नहीं। यदि सम्मिलन सफल हुआ, तो आप LAST_INSERT_ID() पर भरोसा कर सकते हैं।
संपादित करें: php में:
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
mysql_query('<PUT YOUR INSERT HERE');
if(mysql_affected_rows()>0){
$last_id=mysql_insert_id();
}else{
//panic!
}
?>
मुझे आश्चर्य है कि कोई देशी mysql फ़ंक्शन php के msyql_affected_rows() के समान है? हमारे सभी डीएमएल डेटाबेस में संग्रहित प्रक्रियाओं/कार्यों के रूप में रहता है। – codemonkey
http://php.net/manual/en/function.mysql-query.php अन्य प्रकार के SQL कथन, INSERT, अद्यतन, DELETE, DROP, आदि के लिए, mysql_query() सफलता पर त्रुटि या त्रुटि पर गलत लौटाता है। – Notinlist
एक सम्मिलित कथन "सफल" हो सकता है और कोई भी सम्मिलन नहीं कर सकता है। एक इंसर्ट IGNORE कथन पर विचार करें। इस मामले में, mysql_query() के वापसी मूल्य पर भरोसा गलत परिणाम देगा। –
- 1. MySQL और गलत आईडी का मौका LAST_INSERT_ID()
- 2. अमान्य कलाकार जब mysql LAST_INSERT_ID लौटने() dapper.net
- 3. MySQL LAST_INSERT_ID() एकाधिक रिकॉर्ड INSERT कथन
- 4. AUTO_INCREMENT और LAST_INSERT_ID
- 5. प्रतिरूपण पहचान बनाम ऐप पूल पहचान?
- 6. पहचान बनाम कीवर्ड
- 7. GUID INT पहचान बनाम
- 8. MySQL रिकर्सिव चक्र पहचान प्रक्रिया
- 9. MySQL बनाम फ़ायरबर्ड बनाम SQLite
- 10. MySDB बनाम MySDB बनाम MySQL पर MySQL परमाणु अद्यतन
- 11. पहचान मूल्य लौटने पर ExecuteScalar बनाम ExecuteNonQuery
- 12. आईआईएस ऐप पूल पहचान बनाम विंडोज खाता
- 13. रेडिस बनाम MySQL?
- 14. MySQL enum बनाम सेट
- 15. सीएसवी बनाम MySQL प्रदर्शन
- 16. MySQL: NULL बनाम ""
- 17. couchdb बनाम mysql गति
- 18. मोंगोडीबी बनाम MySQL
- 19. MySQL वर्कबेंच बनाम phpMyAdmin
- 20. MySQL प्रदर्शन: बनाम कहां
- 21. MySQL - लंबाई() बनाम char_length()
- 22. MySQL बनाम JSON - क्यों?
- 23. MySQL: bigint बनाम int
- 24. डालने वाली पंक्ति की आईडी को पुनः प्राप्त करने के लिए MYSQL LAST_INSERT_ID() का उपयोग करना?
- 25. PHP के माध्यम से LAST_INSERT_ID() का उपयोग कर?
- 26. COUNT (आईडी) बनाम COUNT (*) MySQL
- 27. MySQL INSERT बनाम PHP file_put_contents
- 28. MySQL इंटीजर बनाम डेटटाइम इंडेक्स
- 29. डाटा एग्रीगेशन mongodb बनाम mysql
- 30. mysql संघ बनाम एकाधिक प्रश्न
@@ पहचान आप किसी भी क्षेत्र में सबसे हाल ही में डालने देता है। यह एक ट्रिगर का परिणाम हो सकता है जिसमें आपके द्वारा अभी डाले गए सम्मिलन कथन के साथ कुछ भी नहीं है। SQL सर्वर में आप आमतौर पर scope_identity() फ़ंक्शन का उपयोग करना चाहते हैं। – feihtthief
@feihththief - thx, अच्छा स्पष्टीकरण +1 – codemonkey
कृपया ध्यान रखें कि SQL सर्वर की @@ पहचान और scope_identity(), जब एकाधिक प्रोसेसर वाले सर्वर पर एकाधिक-पंक्ति प्रविष्टियों के साथ उपयोग किया जाता है, तो गलत जवाब दे सकते हैं! विकल्प का उपयोग (MAXDOP 1) एक वर्कअराउंड है। – ErikE