SELECT STATEMENT_DIGEST_TEXT
в MySQL 8.0 может использоваться для проверки синтаксиса запроса MySQL.
8.0.4>SELECT STATEMENT_DIGEST_TEXT('FLUSH TABLES')\G
STATEMENT_DIGEST_TEXT('FLUSH TABLES'): FLUSH TABLES
8.0.4>SELECT STATEMENT_DIGEST_TEXT("SET GLOBAL second_cache.key_buffer_size=128*1024;")\G
STATEMENT_DIGEST_TEXT("SET GLOBAL second_cache.key_buffer_size=128*1024;"): SET GLOBAL `second_cache` . `key_buffer_size` = ? * ? ;
8.0.4>SELECT STATEMENT_DIGEST_TEXT("create TABLE t1 ( a2 int unsigned not null, b2 int unsigned not null, c2 int unsigned not null, primary key (a2), index b2x (b2), index c2x (c2) ) ENGINE=MEMORY;")\G
STATEMENT_DIGEST_TEXT("create TABLE t1 ( a2 int unsigned not null, b2 int unsigned not null, c2 int unsigned not null, primary key (a2), index b2x (b2), index c2x (c2) ) ENGINE=MEMORY;"): CREATE TABLE `t1` ( `a2` INTEGER UNSIGNED NOT NULL , `b2` INTEGER UNSIGNED NOT NULL , `c2` INTEGER UNSIGNED NOT NULL , PRIMARY KEY ( `a2` ) , INDEX `b2x` ( `b2` ) , INDEX `c2x` ( `c2` ) ) ENGINE = MEMORY ;
Если SQL не поддерживается, вы получите ошибку. Как и следующий, но в этом ответе есть что-то особенное;
8.0.4>SELECT STATEMENT_DIGEST_TEXT('HELP SELECT')\G
ERROR 3676 (HY000): Could not parse argument to digest function: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT' at line 1".
Вы видели, что особенного? Дело в том, что «HELP» является действительным, но клиентским ключевым словом, а не серверным ключевым словом. В любом случае, недопустимый оператор SQL приведет к аналогичной ситуации; ошибка.
Таким образом, вы можете проверить, основываясь на ОШИБКАХ или НЕТ ОШИБКАХ, чтобы узнать, действителен ли переданный синтаксис SQL (исключая очень ограниченный набор команд только на стороне клиента, но они не будут интересны большинству людей) .
Резюме; SELECT STATEMENT_DIGEST_TEXT
- это комплексный синтаксический анализатор SQL (хотя это может быть не прямая / предполагаемая функция), который можно использовать во всех случаях для быстрой проверки правильности операторов и без их фактического выполнения. Это огромный прогресс в том, что касается проверки правильности SQL.
Обратите внимание, что для этого вам нужно настроить и запустить сервер MySQL. Вы можете передавать запросы с помощью клиента mysql -e
или канала mysql
и т. Д.