2017-05-04 6 views
2

こんにちは私は1つの問題に直面しています投稿mysql 5.7 information_schema.GLOBAL_STATUSは、これの代わりに使用されていますperformance_schema.global_statusを使用しています。mysqlのバージョンに応じてmysqlのクエリ

私はMySQLのバージョンに応じて、特定のテーブルをクエリする方法を知りたいと思います。

私が知っているのはSelect @@versionです。私にはmysqlのバージョンがあります。

SELECT * FROM performance_schema.global_status 
      WHERE VARIABLE_VALUE REGEXP '^-?[0-9]+$'. 

ありがとうございます。

+1

理想的には、新しいバージョンの変更を破るごとにクエリを更新します! – Anil

+0

このクエリを実行する必要があるコンテキストは何ですか?ストアドプロシージャ、関数、スクリプト?明らかに、コマンドラインから正しいクエリを自分で実行することができます。 –

+1

1つのオプションは、[14.5準備済みSQL文構文](https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html)を使用することです。 [db-fiddle](https://www.db-fiddle.com/f/3PMNx6vwxNerug3DDW6Fiy/1)の例を参照してください。 – wchiquito

答えて

0

この答えの文脈でMySQLシェル(たとえば、PHP)の外部からデータベースをクエリすると仮定します。条件付きコメントで後のリリースのバージョン番号を追加しようとしないでください(これを試す時間はありませんでした)。詳細hereおよびhere。あなたのプログラムで計画通り、これらを使用することができます結果がある場合には

/*!40122 SELECT col FROM mytable;*/ 

これは最初のクエリは次のようになりますが、唯一4.1.22後のMySQLのバージョンで結果を返します意味しますそして、あなたがそうのような以前のバージョンの構文を実行するためにifを使用することができない場合:

SELECT differentSyntaxCol FROM mytable; 

注これはいくつかのバージョンで作業する場合、MySQLのバージョンの数をダウンカスケードするようになっていませんが、何があるとすることができます'の下の構文あなたは最新のものから始めて作業しなければなりません。

よろしく、

ジェームズ

+0

しかし、私は同意しますが、異なるバージョンの1つの2つのクエリを使用し、他の失敗、それは私がやりたかった最後のオプションです。クエリでIF-ELSEを実行できれば、それは素晴らしいことです。 – user149621

+0

私の知る限りオプションはありません、1)パーサーは古くなった構文でエラーになります.2)フロー制御のためには、「IF ELSE」はストアドプロシージャ内でしか使用できません。実際のクエリを投稿できますか?条件付きコメントを使用して特定のパーツにコメントする方法があるかもしれません。上記の最初のクエリが機能する場合、2番目のクエリは決して実行されないため、失敗しません。 –

+0

上記5.6 SELECT * FROM performance_schema.global_status WHERE VARIABLE_VALUE REGEXP '^ - ?[0-9] + $'。 SELECT * FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_VALUE REGEXP '^ - ?[0-9] + $'。 – user149621

関連する問題