पोस्टग्रेएसक्यूएल CREATE SEQUENCE seq_name
के साथ इस तरह स्थापित किया जा सकता है और प्रत्येक सम्मिलन पर nextval(seq_name)
का उपयोग कर सकता है।
MySQL के लिए मूल समर्थन नहीं है, तो आप उस कॉलम पर केवल एक कॉलम और AUTO_INCREMENT
के साथ एक तालिका बनाकर PostgreSQL SEQUENCE के व्यवहार को अनुकरण कर सकते हैं।
आप उस तालिका में हमेशा डालें, उस तालिका के LAST_INSERT_ID
को उस तालिका को पढ़ने के लिए जिसे आपको अपनी तालिका में डालने की आवश्यकता है। यह लेनदेन सुरक्षित होगा, इसलिए डुप्लीकेट कभी नहीं बनाया जाएगा।
इसे प्राप्त करने का एक और तरीका एक कॉलम संख्या AUTO_INCREMENT
के साथ एक तालिका बनाना और वर्तमान अधिकतम मान रखने वाली केवल एक पंक्ति है।
हर बार जब आप आप UPDATE seq_table SET seq_column = seq_colum+1;
एक वेतन वृद्धि अद्यतन परमाणु में ही है पर अमल बढ़ाने के लिए की जरूरत है, लेकिन आप भी जो दो बयान करता है और वे जब तक आप उन्हें चारों ओर एक लेन-देन और एक उचित अलगाव सेट एक साथ परमाणु नहीं हैं बाद में मूल्य पढ़ने की जरूरत है स्तर। यह दृष्टिकोण अंतरिक्ष बचाता है लेकिन लॉकिंग प्रश्न भी उत्पन्न करता है।
INSERT
की कोशिश कर रहे एकाधिक थ्रेडों को दूसरों को अपडेट करने और नए मान को पढ़ने में सक्षम होने से पहले seq_table
को अपडेट करने के लिए इंतजार करना होगा।
इसके अलावा, आप एक उपयुक्त ISOLATION LEVEL
के साथ एक सौदे में UPDATE
और SELECT
seq_table
पर लपेट के लिए मूल्य है कि कुछ अन्य धागे के बाद आप इसे वृद्धि वृद्धि पढ़ने से बचने के लिए होगा।
इसका मतलब है कि INSERTS
एक लेनदेन संबंधी मुद्दा बन गया है लेकिन आम तौर पर वे नहीं हैं, इसलिए मैं दूसरे दृष्टिकोण की अनुशंसा नहीं करता।
स्रोत
2012-07-04 10:35:12
यदि आप विशिष्टता की गारंटी देना चाहते हैं, तो आप MySQL के ['UUID_SHORT()'] (http://dev.mysql.com/doc/en/miscellaneous-functions.html#function_uuid-short) फ़ंक्शन का उपयोग कर सकते हैं। – eggyal
MySQL में अनुक्रम नहीं हैं (जैसा कि अधिकांश अन्य डीबीएमएस करते हैं)। आपको अपना खुद का समाधान रोल करने की जरूरत है। –
मुझे मूल तरीके से पता नहीं है। लेकिन हो सकता है कि आप एक सम्मिलित ट्रिगर लिख सकें जो उच्चतम अनुक्रमणिका के लिए सभी तालिकाओं की खोज करता है और उस मान को वापस कर देता है। कम से कम सिद्धांत में, ईमानदारी से मुझे यकीन नहीं है कि यह MySQL में संभव है। – acme