2012-02-21 18 views
6

मैं जो कि एक अतिरिक्त चयन बयान हर बार मैं सम्मिलित किया जा आवश्यकता धारणा है कि सिर्फ MySQL UUID() के माध्यम से प्राथमिक कुंजी उत्पन्न कुंजी अद्वितीय भर सर्वर होगा होने, आदिMySQL UUID प्राथमिक कुंजी - PHP द्वारा उत्पन्न या MySQL द्वारा?

लेकिन, there is no way to fetch the last inserted UUID, के तहत किया गया।

क्या PHP को सटीक उसी UUID() उत्पन्न करना संभव है जो MySQL उत्पन्न करेगा?

उत्तर

9

नहीं, PHP को सटीक उसी UUID() को MySQL के रूप में उत्पन्न करना संभव नहीं है क्योंकि यह एक (पूरी तरह से) यादृच्छिक संख्या है।

ऐसा लगता है कि आप अपनी समस्या यह है कि आप MySQL में UUID() का उपयोग करना पसंद करते हैं लेकिन यह पता लगाने के लिए कोई अतिरिक्त क्वेरी निष्पादित नहीं करना चाहते कि नया UUID क्या है।

तो PHP UUID क्यों नहीं बनाते हैं ताकि आपके INSERT क्वेरी में प्राथमिक कुंजी के रूप में उपयोग किया जा सके ?? This comment on php.net आपको यह दिखाना चाहिए कि यह कैसे करें।

का उपयोग करते हुए उन नमूना कार्य:

$uuid = UUID::v4(); 
$sql = "INSERT INTO mytable (uuid, foo) VALUES ('{$uuid}', 'bar');"; 
echo "The UUID is: ". $uuid; 

संपादित: वहाँ जो UUID रों के विभिन्न प्रकार उत्पन्न उस पृष्ठ पर कई विधियां हैं। v4 छद्म-यादृच्छिक है, लेकिन आप एक अलग संस्करण का उपयोग कर सकते हैं या अपना खुद का UUID जनरेटर बना सकते हैं।

+0

हम्म, इस विधि का उपयोग करके, मुझे यह जांचना होगा कि यह MySQL में एक अद्वितीय यूयूआईडी है, और यदि यह सर्वरों में अद्वितीय है। ऐसा लगता है कि एक अतिरिक्त चेक-फॉर-अनन्य या डेटा पुल हर तरह की आवश्यकता है? – ina

+1

यदि आप यादृच्छिक रूप से जेनरेट किए गए यूयूआईडी का उपयोग करते हैं, तो आपको यह समस्या नहीं होगी। सांख्यिकीय रूप से, यदि आपने 100 वर्षों के लिए ** 1 अरब ** यूयूआईडी ** हर सेकेंड ** उत्पन्न किया है, तो केवल 50% मौका है कि ** उनमें से केवल एक ** टकराएगा। (स्रोत: http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates) हालांकि आप कभी भी टक्कर नहीं देख पाएंगे, फिर भी यह यूयूआईडी को MySQL में प्राथमिक कुंजी बनाने और सर्वर को नियमित रूप से सिंक करने के लिए स्मार्ट होगा। –

0

मैंने पहले चरण की कोशिश की: $ uuid = UUID :: v4(); लेकिन यह मेरे सर्वर को लटका दिया, इसलिए एक और विचार दिमाग में आया जिसकी मैंने कोशिश की:

क्वेरी $ sql1 = SELECT UUID() ASUUID से डेटा प्राप्त करें; तो

चर $ UUID में स्टोर और फिर नीचे

$ एसक्यूएल का उपयोग = "mytable (UUID, foo) मूल्यों ('{$ UUID}', 'बार') में डालने,"; गूंज "यूयूआईडी है:"। $ UUID;

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