Ответ 1
Вы можете вставить его в браузер запросов, такой как MySQL Query Browser (часть пакета GUI Tools), и визуально проверить, как цветные слова и строковые символы окрашены, чтобы более легко увидеть, были ли вы сделаны синтаксические ошибки.
Как проверить синтаксис SQL в файле .sql?
Вы можете вставить его в браузер запросов, такой как MySQL Query Browser (часть пакета GUI Tools), и визуально проверить, как цветные слова и строковые символы окрашены, чтобы более легко увидеть, были ли вы сделаны синтаксические ошибки.
Основной лексер, похоже, реализован в sql/sql_lex.cc. Вы можете использовать/спасти это, чтобы создать собственный тестовый парсер. Но это будет проверять только на синтаксис, но не на ошибки во время выполнения.
просто запустите его....
начать транзакцию
запустите его
откат
Есть несколько бесплатных/тестовых продуктов, которые позволят вам подключиться к базе данных MySQL или просто вставить в script, чтобы проверить его. Google - ваш друг здесь. Mimer проверит проверку синтаксиса ANSI-Standard, но, вероятно, не будет обрабатывать какие-либо особенности MySQL.
Есть пара возможностей. Если вы используете таблицы InnoDB, поддерживающие транзакции, вы можете просто выполнить start transaction;
в начале вашего .sql файла и rollback;
в конце. MySQL выводит любые синтаксические ошибки.
Если вы тестируете операторы UPDATE
или DELETE
, вы можете добавить LIMIT 0
в конец, чтобы эти запросы не изменяли какие-либо изменения в базе данных, и все еще должны проверять синтаксис MySQL.
TL;DR:
>awk '{print "EXPLAIN " $0}' statements.sql | mysql --force -u user -p database | grep "ERROR"
Странно, у mysql нет встроенного коммутатора для этого, но вы можете проверить синтаксис, добавив оператор EXPLAIN
перед вашими запросами.
Если у вас есть файл statements.sql
с каждым оператором в одной строке, добавьте EXPLAIN
перед всеми строками:
>awk '{print "EXPLAIN " $0}' statements.sql > check.sql
Затем вы можете запускать операторы с помощью инструмента командной строки mysql
и использовать --force
, чтобы продолжить его при ошибке. Он выведет ошибку для любых операторов с неправильным синтаксисом.
>mysql --force -u user -p database < check.sql
Или просто просматривать строки с ошибками:
>mysql --force -u user -p database < check.sql | grep "ERROR"
Вы можете сделать все это на одной строке без создания промежуточного файла:
>awk '{print "EXPLAIN " $0}' statements.sql | mysql --force -u user -p database | grep "ERROR"