Как мне напечатать запрос по версии MySQL в файле sql?

#mysql #mariadb

#mysql #mariadb

Вопрос:

Я хочу напечатать запрос по версии MySQL в файле .sql.

Когда я использую MySQL версии 5.6, хочу напечатать (2 столбца)

 SELECT user, host FROM mysql.user;
 

или, я использую MySQL версии 5.7 или 8, хочу распечатать (3 столбца)

 SELECT user, host, account_locked FROM mysql.user;
 

Потому что версия MySQL 5.6 не имеет столбца account_locked.

Комментарии:

1. Вам необходимо поддерживать версии вашего кода, совместимые с DDL

Ответ №1:

 mysql> SELECT * FROM information_schema.GLOBAL_VARIABLES WHERE variable_name = 'version';
 --------------- ----------------- 
| VARIABLE_NAME | VARIABLE_VALUE  |
 --------------- ----------------- 
| VERSION       | 5.6.22-71.0-log |
 --------------- ----------------- 
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'version';
 --------------- ----------------- 
| Variable_name | Value           |
 --------------- ----------------- 
| version       | 5.6.22-71.0-log |
 --------------- ----------------- 
1 row in set (0.00 sec)

mysql> SELECT @@version;
 ----------------- 
| @@version       |
 ----------------- 
| 5.6.22-71.0-log |
 ----------------- 
1 row in set (0.00 sec)
 

В хранимой процедуре вы можете сделать что-то вроде

 IF (@@version < "5.7") THEN
    SELECT user, host FROM mysql.user;
ELSE
    SELECT user, host, account_locked FROM mysql.user;
ENDIF;
 

Становится еще сложнее, если вам также нужно обрабатывать MariaDB с его «10.x.y». И, если у Percona есть какие-либо различия, вам нужно углубиться в «версию».