2017-05-04 40 views
2

嗨我正面臨一個問題,Post mysql 5.7 information_schema.GLOBAL_STATUS已棄用,而不是他們使用的是performance_schema.global_statusMysql查詢取決於mysql的版本

所以我想知道取決於MySQL版本如何查詢一個特定的表。

我知道Select @@version給我的版本的MySQL。

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

在此先感謝。

+1

理想的情況下,我們更新了查詢,每突破一個新版本的變化! – Anil

+0

您需要運行此查詢的上下文是什麼?存儲過程,函數,腳本?顯然,你可以自己從命令行執行正確的查詢。 –

+1

一種選擇是使用[14.5 Prepared SQL Statement Syntax](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)之外查詢數據庫。爲什麼不嘗試在條件註釋中添加更高版本的版本號(注意我沒有時間來試試)?詳細的herehere

這意味着第一個查詢應該是這樣的,但只有4.1.22後返回MySQL的版本結果:

/*!40122 SELECT col FROM mytable;*/ 

在這種情況下有結果的話,在你的計劃,這些計劃可以使用如果沒有的話,你可以使用一個if執行較早版本的語法像這樣:

SELECT differentSyntaxCol FROM mytable; 

注意這是可以改編,如果有好幾個版本的工作級聯了一批的MySQL版本,但因爲沒有'下面的版本的語法在X'上,你需要從最新的開始,並減少。

問候,

詹姆斯

+0

雅同意,但使用兩個查詢不同版本之一將工作和其他失敗,這是我想要做的最後一個選項。如果我們可以在查詢中執行IF-ELSE,那將很棒。 – user149621

+0

據我所知,這不是一個選項,1)解析器在過時的語法上會出錯,並且2)用於流量控制'IF ELSE'只能在存儲過程中使用。你能發佈實際的查詢嗎?可能有一種方法可以用條件註釋來評論特定部分。請注意,如果上面的第一個查詢有效,第二個查詢將永遠不會運行,因此不會失敗。 –

+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