2009-06-05 9 views
19

.sqlファイルのSQL構文を確認する方法はありますか。.sqlファイルのSQL構文を確認するにはどうすればよいですか?

+0

これは明確化の多くを必要とします役に立つ(と開いている)。あなたは視覚的にSQLを調べるためのヒントを求めていますか?あなたは構文を確認するのに役立つスクリプトを探していますか?スクリプトを実行していて、特定のエラーを理解するのに役立つ必要がありますか? –

+5

私は彼らがファイルが有効なmySql構文を持っていることを確認したいと思います。 –

+0

SQLファイルまたはスクリプトを視覚的に検査することによって、構文をチェックすることもできます。 – maxjackie

答えて

2

あなたは、MySQLクエリブラウザ(GUI Toolsパッケージの一部)のようなクエリブラウザに貼り付けて、視覚的にキーワードや文字列リテラルを使用すると、構文エラーを作った場合は、より簡単に確認するように着色されているか検査できます。

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

2

だけで取引を開始

....それを実行

実行それ

ロールバック

+0

これを実行すると答えは出ますが、そのファイルに 私の構文エラーが表示されています.... – maxjackie

+0

有効な構文を持つことができますが、実行時にエラーが発生する –

+10

テーブルがMyISAMの場合、暗黙的コミット・ステートメント(例えばDDL)を実行するか、またはスクリプトにCOMMITステートメントが含まれている場合 –

2

そこにあなたをできるようになるといくつかの無料/試みるウェア製品があります。 MySQLデータベースに接続するか、スクリプトを貼り付けて検証するだけです。 Googleはあなたの友人です。 Mimer will check ANSI-Standard syntax validationしかし、おそらくMySQLの詳細は扱えません。

1

possiblitiesがいくつかあります。あなたがトランザクションをサポートするInnoDBテーブルを使用している場合は、単にあなたの.sqlファイルの先頭にstart transaction;と最後にrollback;を実行することができます。 MySQLは構文エラーを出力します。

UPDATEまたはDELETEステートメントをテストしている場合は、最後にLIMIT 0を追加して、これらのクエリがデータベースを変更しないようにしても構いません。

+2

スクリプトには、暗黙のコミットを引き起こすステートメントが含まれている場合があります。 –

+0

これは、.sqlファイルの内容についていくつかの前提があります。 –

3

基本レクサーは、SQL/sql_lex.ccに実装しているようです。独自のテストパーサーを構築するために/ salvageを使用することができます。 しかしこれは構文だけをチェックしますが、ランタイムエラーはチェックしません。

+1

この種のプログラム的な解決策は、例えば、mysqldumpの結果が少なくとも構文的に完全であることを検証するのに非常に役立ちます。 – ClearCrescendo

1

TLDR:

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

、mysqlはありません、このためのスイッチを内蔵していますが、目の前にEXPLAINステートメントを追加することによって、構文をチェックすることができますあなたの質問。

あなたが1行上の各ステートメントを使用してstatements.sqlファイルを持っている場合は、とのすべての行の前にEXPLAINを先頭に追加:あなたはその後、mysqlコマンドラインツールを使用してステートメントを実行し、--forceにを使用することができます

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

それは誤って続けます。構文が正しくない文については、エラーを出力します。

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

それとものみにエラーが発生した行を表示します。

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

あなたは、中間ファイルを作成せずに1行ですべてを行うことができます。

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

これを追加してファイルを1行にする必要はありません。 'awk '{if(sub(/; $;、"; \ n "))printf" EXPLAIN%s "、$ 0; else print $ 0} 'statements.sql'セミコロンで終わる行を結合します。 – Jon49

関連する問題