MySQL - स्वचालित रूप से UUID में डालने के लिए ऑल्टर टेबल


14

ठीक है, मुझे पता है कि मैंने पहले भी ऐसा किया है। लेकिन मैं अपने जीवन के लिए यह पता नहीं लगा सकता। मैंने एक टेबल बनाई। स्तंभों में से एक "लॉगआईडी" है, यह प्राथमिक कुंजी भी है।

मैं इसे कैसे बदल सकता हूं ताकि यह कॉलम प्रत्येक नई प्रविष्टि के लिए एक UUID उत्पन्न करे?

धन्यवाद

जवाबों:


17

दिए गए कॉलम के लिए UUID बनाने के लिए डालने से पहले बस एक ट्रिगर बनाएं ।

CREATE TRIGGER before_insert_mytable
  BEFORE INSERT ON mytable
  FOR EACH ROW
  SET new.LogID = uuid();

3

UUID () अभिव्यक्ति एक UUID जब कहा जाता है उत्पन्न करता है।

दुर्भाग्य से (AFAIK वैसे भी) MySQL अभिव्यक्ति को एक क्षेत्र के लिए डिफ़ॉल्ट मान के रूप में अनुमति नहीं देगा। चारों ओर एक काम के रूप में, आप हमेशा फ़ील्ड को डिफ़ॉल्ट रूप से सेट कर सकते हैं और एक ट्रिगर है जो सम्मिलित करने पर UUID के साथ फ़ील्ड को अपडेट करता है।


2

मुझे पूरा यकीन है कि आप अभी भी वास्तव में नहीं कर सकते । मैं गंभीरता से एक UUID को प्राथमिक कुंजी के रूप में उपयोग करने पर विचार नहीं करूंगा , इसके बजाय एक स्लिमर, अच्छे डेटा प्रकार का उपयोग कर रहा हूं INT। आप अपने UUID को एक अलग कॉलम के रूप में जोड़ सकते हैं और इसे अपडेट कर सकते हैं TRIGGER, यदि वह आपको सूट करता है।


यदि आपके डेटाबेस में अद्वितीय होने के लिए रिकॉर्ड की आवश्यकता होती है, तो इंटीगर टूट जाते हैं।
Cfreak

1
मुझे संदेह है कि अगर कोई बड़ा मॉडल डिज़ाइन या चुना हुआ टूल इशू है, तो आवश्यकताएं उस स्तर पर इंजन स्टोरेज पैटर्न को निर्धारित कर रही हैं। एक अलग स्तंभ के रूप में UUID होने वास्तव में इस मामले में दोनों दुनिया समाधान का सबसे अच्छा है।
अवार्क्स

एक बार मनुष्यों के लिए स्वरूपित होने पर UUID फूल जाता है। यदि आप प्राथमिक कुंजी के रूप में एक यूयूआईडी का उपयोग करना चाहते हैं तो डैश को पट्टी करें और इसे अनशेक्स करें। यदि आपको मानव स्वरूपित संस्करण की आवश्यकता है तो आप तालिका में एक उत्पन्न कॉलम जोड़ सकते हैं। SELECT LENGTH(UNHEX(REPLACE(UUID(),'-','')))= 16 बाइट्स बाइनरी। अभी भी बड़ा है INTलेकिन इससे ज्यादा बेहतर हैVARCHAR(36)
miknik

बुरी सलाह, मिकनिक। यदि आप एक प्राथमिक कुंजी के रूप में एक UUID का उपयोग करते हैं तो आपका डेटाबेस बहुत पैमाने पर होगा। एक प्राथमिक प्राथमिक कुंजी के रूप में 16 अलग पूर्णांक स्तंभ हो सकते हैं। और सूचकांक विखंडन प्रचुर मात्रा में! आपकी प्राथमिक कुंजी अब यादृच्छिक है। यदि आप करते हैं, तो विदेशी कुंजियों का उपयोग न करें। O (n) से O (n ^ 2) में परिवर्तन जुड़ता है। O से दो जोड़ (n log10 (n)) से O (n ^ 3) होते हैं। N को 100,000 से बदलें और अंतर को घटाएं।
तमसुराजॉय

2

मैंने सिर्फ अपने आवेदन से सम्मिलित करने पर UUID () कमांड को शामिल करने का निर्णय लिया।

सबको शुक्रीया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.