Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं वाक्यात्मक शुद्धता के लिए (My) SQL कथनों की जाँच कैसे कर सकता हूँ?

जेनकिंस में उपयोग करने के लिए मैसकल में सिंटैक्स लाइनिंग के लिए एक सीएलआई उपकरण की खोज करने के बाद और जल्दी से कुछ भी नहीं मिला (यह स्टैक ओवरफ्लो प्रश्न पहले परिणामों में से एक है - एलओएल) मैं निम्नलिखित समाधान के साथ आया (ओएस:लिनक्स, लेकिन होना चाहिए विंडोज़ के साथ भी व्यवहार्य):

फॉलोइंग जैसा कुछ:

lint_result=`mysql mysql_test -B -f -e 'select asdf s where x;' 2>&1`; if [ `echo $lint_result | sed -r "s/ERROR ([0-9]*).*/\1/g"` -eq 1064 ]; then echo -e "Syntax error:\n${lint_result}"; fi
Syntax error:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where x' at line 1

(एसक्यूएल फाइलों की जांच के लिए आप -बी-ई 'स्टेटमेंट' के बजाय "

यदि क्वेरी के सिंटैक्स को MySQL द्वारा पार्स नहीं किया जा सकता है, तो यह दावा करता है:ERROR 1064 (42000) लाइन 1 पर:आपको अपने SQL सिंटैक्स में त्रुटि है; लाइन 1 पर '' के पास'' का उपयोग करने के लिए सही सिंटैक्स के लिए अपने MySQL सर्वर संस्करण से मेल खाने वाले मैनुअल की जाँच करें

केवल अगर सिंटैक्स सही है तो यह क्वेरी को निष्पादित करने का प्रयास करता है और महसूस करता है कि तालिका मौजूद नहीं है लेकिन यह अब दिलचस्प नहीं है:

ERROR 1146 (42S02) at line 1: Table 'mysql_test.s' doesn't exist

इसलिए त्रुटि 1064 अमान्य सिंटैक्स है। आपको केवल एक खाली परीक्षण डेटाबेस बनाने की आवश्यकता है क्योंकि अन्यथा केवल गलत FROM भाग के साथ त्रुटियाँ दिखाई देंगी (उदाहरण के लिए डेटाबेस को एक मान्य सिंटैक्स जाँच परिणाम प्राप्त करने के लिए आवश्यक है:'s जहाँ x और if से asdf का चयन करें;)।

जहाँ तक मैंने परीक्षण किया यह ठीक काम करता है (संस्करण मैसकल 5.5)।

यहाँ एक पूर्ण बैश स्क्रिप्ट संस्करण है:

#!/bin/bash

source_dir=${1};
database="mysql_test";
mysql_args="-h127.0.0.1";

mysql $mysql_args -B -e "DROP DATABASE IF EXISTS $database; CREATE DATABASE $database;";
for file in `find $source_dir -name "*.sql"`; do
    lint_result=`mysql $mysql_args $database -f -b < $file 2>&1`;
    if [ "`echo $lint_result | sed -r \"s/ERROR ([0-9]*).*/\1/g\"`" = "1064" ]; then
        echo -e "Syntax error in file ${file}:\n${lint_result}" && exit 1;
    fi;
done


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL डेटाबेस में अक्षांश/देशांतर संग्रहीत करते समय उपयोग करने के लिए आदर्श डेटा प्रकार क्या है?

  2. एक व्यक्ति को कई खाते बनाने से रोकने का सबसे अच्छा तरीका

  3. SQL:नवीनतम थ्रेड और नवीनतम पोस्ट का चयन करें, फ़ोरम द्वारा समूहीकृत, नवीनतम पोस्ट द्वारा आदेशित

  4. MySQL, सम्मिलन आदेश द्वारा आदेश, कोई छँटाई कॉलम नहीं

  5. JQuery AJAX और PHP का उपयोग करके mySQL में डुप्लिकेट प्रविष्टियां