Как проверить синтаксис SQL в файле .sql?
Как проверить синтаксис SQL в файле .sql?
Ответ 1
Вы можете вставить его в браузер запросов, такой как MySQL Query Browser (часть пакета GUI Tools), и визуально проверить, как цветные слова и строковые символы окрашены, чтобы более легко увидеть, были ли вы сделаны синтаксические ошибки.
Ответ 2
Основной лексер, похоже, реализован в sql/sql_lex.cc. Вы можете использовать/спасти это, чтобы создать собственный тестовый парсер. Но это будет проверять только на синтаксис, но не на ошибки во время выполнения.
Ответ 3
просто запустите его....
начать транзакцию
запустите его
откат
Ответ 4
Есть несколько бесплатных/тестовых продуктов, которые позволят вам подключиться к базе данных MySQL или просто вставить в script, чтобы проверить его. Google - ваш друг здесь. Mimer проверит проверку синтаксиса ANSI-Standard, но, вероятно, не будет обрабатывать какие-либо особенности MySQL.
Ответ 5
Есть пара возможностей. Если вы используете таблицы InnoDB, поддерживающие транзакции, вы можете просто выполнить start transaction;
в начале вашего .sql файла и rollback;
в конце. MySQL выводит любые синтаксические ошибки.
Если вы тестируете операторы UPDATE
или DELETE
, вы можете добавить LIMIT 0
в конец, чтобы эти запросы не изменяли какие-либо изменения в базе данных, и все еще должны проверять синтаксис MySQL.
Ответ 6
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"