2009-06-05 22 views
19

मैं .sql फ़ाइल में SQL वाक्यविन्यास कैसे देख सकता हूं?मैं .sql फ़ाइल में SQL वाक्यविन्यास कैसे देख सकता हूं?

+0

इस स्पष्टीकरण का एक बहुत जरूरत उपयोगी होने के लिए (और खुला रहने के लिए)। क्या आप अपने एसक्यूएल की दृष्टि से निरीक्षण करने के सुझावों के बारे में पूछ रहे हैं?क्या आप एक ऐसी स्क्रिप्ट की तलाश में हैं जो आपको वाक्यविन्यास की जांच करने में मदद करेगी? क्या आप स्क्रिप्ट चला रहे हैं और आपको किसी विशेष त्रुटि को समझने में मदद चाहिए? –

+5

मुझे लगता है कि वे यह सत्यापित करना चाहते हैं कि फ़ाइल में mySql वाक्यविन्यास मान्य है। –

+0

स्पष्ट रूप से एसक्यूएल फाइल या स्क्रिप्ट का निरीक्षण करने के लिए सिंटैक्स – maxjackie

उत्तर

2

आप इसे MySQL क्वेरी ब्राउज़र (जीयूआई उपकरण पैकेज का हिस्सा) जैसे क्वेरी ब्राउज़र में पेस्ट कर सकते हैं और दृष्टि से निरीक्षण कर सकते हैं कि कीवर्ड और स्ट्रिंग अक्षर कितने आसानी से देखे जाते हैं कि आपने कोई वाक्यविन्यास त्रुटियां की हैं या नहीं।

http://dev.mysql.com/downloads/gui-tools/5.0.html

2

बस इसे चलाते हैं ....

शुरू लेनदेन

रन यह

रोलबैक

+0

इसे चलाने से उत्तर मिलेगा, लेकिन क्या ऐसी कोई चीज है जो मुझे उस फ़ाइल में सिंटैक्स त्रुटियों को दिखाती है .... – maxjackie

+0

आपके पास वैध वाक्यविन्यास हो सकता है और अभी भी रनटाइम त्रुटियां हो सकती हैं –

+10

तालिकाएं MyISAM हैं, या यदि स्क्रिप्ट निहित प्रतिबद्ध प्रतिबद्धता (जैसे डीडीएल) चलाता है, या यदि स्क्रिप्ट में COMMIT स्टेटमेंट शामिल हैं। –

2

वहाँ बाहर है कि आप की अनुमति देगा में कुछ मुफ्त/कोशिश-बर्तन उत्पादों रहे हैं एक MySQL डेटाबेस से कनेक्ट करने के लिए या स्क्रिप्ट में इसे सत्यापित करने के लिए बस पेस्ट करें। Google आपका मित्र है। Mimer will check ANSI-Standard syntax validation लेकिन शायद किसी भी MySQL विनिर्देशों को संभाल नहीं।

1

कुछ संभावनाएं हैं। यदि आप लेन-देन का समर्थन करने वाले इनो डीडी टेबल का उपयोग कर रहे हैं, तो आप अंत में अपनी .sql फ़ाइल की शुरुआत में start transaction; निष्पादित कर सकते हैं और अंत में rollback; निष्पादित कर सकते हैं। MySQL किसी भी वाक्यविन्यास त्रुटियों का उत्पादन करेगा।

आप UPDATE या DELETE बयान testiing रहे हैं, तो आप LIMIT 0 समाप्त करने के लिए किसी भी डेटाबेस परिवर्तन करने से इन प्रश्नों को रोकने के लिए जोड़ सकते हैं, और अभी भी MySQL सिंटैक्स की जाँच की है।

+2

लिपि में ऐसे बयान शामिल हो सकते हैं जो किसी भी तरह से निहित प्रतिबद्धता का कारण बनते हैं। –

+0

सच है, यह .sql फ़ाइल की सामग्री के बारे में कुछ मान्यताओं को बनाता है। –

3

मूल लेक्सर sql/sql_lex.cc में लागू किया प्रतीत होता है। आप अपना खुद का टेस्ट पार्सर बनाने के लिए इसका उपयोग/बचाव कर सकते हैं। लेकिन यह केवल वाक्यविन्यास की जांच करेगा लेकिन किसी भी रनटाइम त्रुटियों के लिए नहीं।

+1

इस प्रकार का प्रोग्रामेटिक समाधान बहुत उपयोगी होगा, उदाहरण के लिए, सत्यापित करें कि एक mysqldump परिणाम कम से कम वाक्य रचनात्मक रूप से पूरा हो गया है। – ClearCrescendo

1

TLDR:

>awk '{print "EXPLAIN " $0}' statements.sql | mysql --force -u user -p database | grep "ERROR" 

अजीब, mysql नहीं है एक अंतर्निहित इस के लिए स्विच, लेकिन आप के सामने EXPLAIN बयान जोड़कर वाक्य रचना की जाँच कर सकते आपके प्रश्न

>awk '{print "EXPLAIN " $0}' statements.sql > check.sql 

फिर आप mysql कमांड लाइन उपकरण के साथ बयान चलाने के लिए और करने के लिए --force उपयोग कर सकते हैं:

के साथ सभी लाइनों के सामने

आप एक लाइन पर प्रत्येक बयान के साथ एक statements.sql फ़ाइल है, तो आगे जोड़ते EXPLAIN क्या यह त्रुटि पर जारी है। यह गलत वाक्यविन्यास वाले किसी भी कथन के लिए एक त्रुटि मुद्रित करेगा।

>mysql --force -u user -p database < check.sql 

या केवल करने के लिए त्रुटियों के साथ लाइनों देखने:

>mysql --force -u user -p database < check.sql | grep "ERROR" 

आप एक मध्यवर्ती फ़ाइल बनाने के बिना एक लाइन पर यह सब कर सकते हैं:

>awk '{print "EXPLAIN " $0}' statements.sql | mysql --force -u user -p database | grep "ERROR" 
+0

मैं इसे बनाने के लिए इसे जोड़ूंगा ताकि फ़ाइल को एक पंक्ति होने की आवश्यकता न हो। 'awk '{if (sub (/; $ /,"; \ n ")) printf" EXPLAIN% s ", $ 0; अन्यथा $ 0} 'statement.sql' प्रिंट करें अर्धविराम में समाप्त लाइनों को मिलाएं। – Jon49

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