Подтвердить что ты не робот

Как проверить синтаксис SQL в файле .sql?

Как проверить синтаксис SQL в файле .sql?

4b9b3361

Ответ 1

Вы можете вставить его в браузер запросов, такой как MySQL Query Browser (часть пакета GUI Tools), и визуально проверить, как цветные слова и строковые символы окрашены, чтобы более легко увидеть, были ли вы сделаны синтаксические ошибки.

http://dev.mysql.com/downloads/gui-tools/5.0.html

Ответ 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"