2009-03-24 10 views
11

मैं ऐसा प्रोग्राम रखने की सोच रहा हूं जो आवश्यकता के रूप में गतिशील रूप से नई तालिकाओं को बनाता है। क्या मेरे पास MySQL में केवल संख्याओं के साथ नामित टेबल हो सकते हैं? MySql में वस्तुओं नामकरण, टेबल सहित के लिएक्या आपको MySQL में तालिका नामों के रूप में संख्याओं का उपयोग करने की अनुमति है?

उत्तर

31

नियम:

http://dev.mysql.com/doc/refman/5.1/en/identifiers.html

पहचानकर्ता लेकिन जब तक उद्धृत केवल अंकों की मिलकर बनता है नहीं हो सकता है एक अंक से शुरू हो सकता है।

तो यह अवैध होगा:

SELECT * FROM 12345; 

लेकिन निम्नलिखित मान्य होगा:

SELECT * FROM `12345`; 

या अगर एएनएसआई मोड में चल रहा निम्नलिखित काम करेगा:

SET @@session.sql_mode=ANSI_QUOTES; 
SELECT * FROM "12345"; 
+0

कि दस्तावेज़ से प्रासंगिक हिस्सा शायद यह एक "पहचानकर्ता अंक के साथ शुरू हो सकता है लेकिन जब तक उद्धृत केवल डिजिट होने नहीं हो सकता है।" –

12

करीम और स्टीव वीट ने बताया, हां, तो आप कर सकते हैं, लेकिन आप उन्हें इस तरह उद्धृत करने के लिए होगा:

SELECT * FROM `3516` 

मैं शायद हालांकि अपनी स्क्रिप्ट पुनर्विचार करने का सुझाव सकता है? एक उपसर्ग जोड़ें: "t3516" नाम की एक तालिका केवल "3516" के रूप में भ्रमित नहीं होगी।

इसके अलावा, आप बस किसी भी संख्या के बजाय पत्र का उपयोग करने के नंबर परिवर्तित कर सकते हैं:

table 0 - t_a 
table 1 - t_b 
table 2 - t_c 
table 25 - t_z 
table 26 - t_aa 
table 27 - t_ab 
... etc 
0

, karim79 द्वारा दिए गए के रूप में जब तक आप तालिका नाम उद्धृत करने के लिए ध्यान रखना जवाब है, हां में है। आप निश्चित रूप से एक संख्या के साथ उपसर्ग का उपयोग कर सकते हैं, उदाहरण के लिए। mytable1, mytable2, ...; जो उद्धरण के बिना काम करेगा।

उसने कहा, आपको वास्तव में इस बारे में सोचना चाहिए कि आप इतनी सारी टेबल क्यों बनाना चाहते हैं। चीजों को करने का स्वीकार्य तरीका एक सारणी में एक साथ है जो सब कुछ है। तो table1, table2 होने के बजाय ... आप एक टेबल का उपयोग करेंगे, और संख्या को कॉलम में स्टोर करेंगे।

यह सिर्फ प्राकृतिक तरीका है। चीजों को करने का आपका तरीका आसानी से कई समस्याओं का कारण बन सकता है (डीबी स्कीमा बदलना बैकअप के लिए समस्याग्रस्त है, कई तालिकाओं के कारण अन्य उपकरणों के लिए डीबी के साथ काम करना मुश्किल हो जाता है, स्कीमा परिवर्तन सभी तालिकाओं में किया जाना चाहिए)। रनटाइम पर अपनी स्कीमा को गतिशील रूप से बदलना आम तौर पर एक अच्छा विचार नहीं है।

+0

सुनिश्चित नहीं हैं कि क्या मतलब है। जवाब निश्चित रूप से हां है जब तक आप पहचानकर्ता इसे हर बार बचते हैं। साथ ही, मैं कई मामलों में आया हूं जहां टेबल नाम स्वचालित रूप से जेनरेट किए गए डेटाबेस में पूर्णांक हैं। – techdude

+0

@techdude: मैं "क्रमांकित तालिकाओं" वाले डेटाबेस में कभी नहीं आया हूं। आपने उन्हें कहाँ देखा? और वे क्यों इस्तेमाल किया गया था? मैं उत्सुक हूँ ... – sleske

+0

विशिष्ट स्थान महत्वपूर्ण नहीं है (या सार्वजनिक)। कुंजी यह है कि आप टेबल नामों के लिए संख्याओं का उपयोग कर सकते हैं। पूछने वाले के प्रश्न को और संबोधित करने के लिए, एक संभावित उपयोग यह होगा कि आपके पास एक मास्टर टेबल है जहां प्रत्येक पंक्ति आपके द्वारा बनाई गई एक नई तालिका से मेल खाती है (और तालिका के बारे में अन्य जानकारी हो सकती है) जबकि एक ऑटो increment integer कॉलम भी देता है तालिका के लिए पूर्णांक बनाया जाएगा। इस मामले में इसे स्ट्रिंग बनाने की कोई आवश्यकता नहीं है, क्योंकि पूर्णांक तालिका नाम (और उस मामले के लिए कॉलम नाम) सभी प्रमुख डीबीएमएस द्वारा समर्थित हैं। – techdude

0

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

0

बैकटिक (`) का उपयोग टेबल नाम को उद्धृत करने के लिए करें यदि यह पूरी तरह से संख्या है। यह कीबोर्ड पर esc बटन के नीचे है

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

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