2

プログラム SQLYog によって生成された MySQL 5.6.16 データベースの SQL ダンプを参照しているときに、すべてのストアド プロシージャCREATEステートメントがコメント文字 ( ) で囲まれていることに気付きました/* */。ただし、ストアド プロシージャは、SQL スクリプトの実行時に作成されました。

CREATEストアド プロシージャステートメントを囲むコメントと、これらのコメント付きステートメントが実際に実行されたことに驚きました。

これが実際に起こったことを見て、私は、実際には、SQL 標準、MySQL 自体、または特に SQLYog のいずれかが、少なくともいくつかのコメント付き SQL コードの実行をサポートすることを文書化していると思いました。

これにより、SQL スクリプトの実行時に一部のコメント付きコード ブロックが実行されるという事実に関する詳細が記載されている仕様書を検索することになりました。ただし、1 時間の検索 (特に、公式の仕様を探しますが、SQL、MySQL、または SQLYog のいずれかのドキュメントを二次的に検索します) により、文字通り 1 つのリンクのみが見つかりました。実際、SQL スクリプト内のコードは実行されます。ここにあります:SQLのコメント行が実行されることを参照するためのリンク(いくつかの回答を含む)。

ここで明らかなことを見逃している可能性が高いことは承知していますが、これに関する仕様を見つけることができませんでした。

誰かが確認してもらえますか、そうであれば参照を提供してください。「/* */」構文がステートメントを囲んでいる場合でも実行される SQL を述べている (および説明している) 正式なドキュメント (これが SQL、MySQL、または SQLYog であるかどうか) ? ありがとう。

4

1 に答える 1

4

マニュアルの「コメント構文」の下にあります。

http://dev.mysql.com/doc/refman/5.6/en/comments.html

/*! MySQL-specific code */ 

この場合、MySQL サーバーは他の SQL ステートメントと同様にコメント内のコードを解析して実行しますが、他の SQL サーバーは拡張子を無視します。 

...

「!」の後にバージョン番号を追加すると、文字、コメント内の構文は、MySQL のバージョンが指定されたバージョン番号以上である場合にのみ実行されます。

ストアド プロシージャの場合、宣言全体がラップされるため、非常に古いバージョンの MySQL サーバーでダンプ ファイルを復元しようとすると、ストアド プロシージャをまったくサポートしていないため、プロシージャ定義がサーバーによって無視されます。復元操作全体が失敗する代わりに。

于 2014-09-03T12:12:07.847 に答える