2009-06-05 16 views
19

Come posso verificare la sintassi SQL in un file .sql?Come posso verificare la sintassi SQL in un file .sql?

+0

Questo bisogno di un sacco di chiarimento essere utile (e rimanere aperto). Stai chiedendo suggerimenti per ispezionare visivamente il tuo SQL?Stai cercando uno script che ti aiuti a controllare la sintassi? Stai eseguendo lo script e hai bisogno di aiuto per capire un particolare errore? –

+5

Penso che vogliano verificare che il file abbia una sintassi mySql valida. –

+0

controlla visivamente anche il file SQL o lo script per verificare la sintassi – maxjackie

risposta

2

È possibile incollarlo in un browser di query come MySQL Query Browser (parte del pacchetto Strumenti della GUI) e verificare visivamente come le parole chiave e le stringhe siano colorate per vedere più facilmente se sono stati commessi errori di sintassi.

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

2

basta eseguirlo ....

iniziare la transazione

eseguirlo

rollback

+0

runing darà la risposta, ma c'è qualcosa che mostra errori di sintassi in quel file .... – maxjackie

+0

puoi avere una sintassi valida e avere ancora errori di runtime –

+10

Impossibile eseguire il rollback se le tabelle sono MyISAM, o se script esegue istruzioni implicite di commit (ad esempio DDL) o se lo script contiene istruzioni COMMIT. –

2

Ci sono alcuni prodotti senza/try-ware là fuori che ti permetterà connettersi a un database MySQL o semplicemente incollare lo script per convalidarlo. Google è tuo amico qui. Mimer will check ANSI-Standard syntax validation ma probabilmente non gestisce alcuna specifica MySQL.

1

Ci sono un paio di possibilità. Se si utilizzano tabelle InnoDB che supportano le transazioni, è possibile eseguire semplicemente un start transaction; all'inizio del file .sql e un rollback; alla fine. MySQL emetterà errori di sintassi.

Se si testiing UPDATE o DELETE dichiarazioni, si potrebbe aggiungere LIMIT 0 fino alla fine per evitare che queste query di apportare modifiche al database, ed ancora fare controllare la sintassi MySQL.

+2

Lo script può contenere istruzioni che causano comunque un commit implicito. –

+0

È vero, questo fa alcune supposizioni sul contenuto del file .sql. –

3

Il lexer di base sembra essere implementato in sql/sql_lex.cc. Potresti usare/salvare questo per costruire il tuo parser di test. Ma questo controllerebbe solo la sintassi ma non tutti gli errori di runtime.

+1

Questo tipo di soluzione programmatica sarebbe molto utile per, ad esempio, convalidare che un risultato mysqldump sia almeno sintatticamente completo. – ClearCrescendo

1

TLDR:

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

Stranamente, mysql non dispone di un interruttore incorporato per questo, ma è possibile controllare la sintassi aggiungendo l'istruzione EXPLAIN davanti le tue domande

Se si dispone di un file statements.sql con ogni affermazione su una riga, anteporre EXPLAIN di fronte a tutte le linee con:

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

È quindi possibile eseguire le istruzioni con lo strumento mysql della riga di comando e utilizzare --force per continua con errori. Stamperà un errore per qualsiasi affermazione con sintassi errata.

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

O Per visualizzare solo le linee con errori:

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

Si può fare tutto questo su una linea senza creare un file intermedio:

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

Vorrei aggiungere questo per rendere così il file non deve essere una singola riga. 'awk '{if (sub (/; $ /,"; \ n ")) printf" EXPLAIN% s ", $ 0; else print $ 0} 'statements.sql' Combina linee che terminano in punto e virgola. – Jon49

Problemi correlati