2009-06-05 15 views
19

Jak mogę sprawdzić składnię SQL w pliku .sql?Jak mogę sprawdzić składnię SQL w pliku .sql?

+0

To wymaga dużo wyjaśnień być użytecznym (i pozostać otwartym). Czy pytasz o wskazówki dotyczące wizualnej kontroli SQL?Szukasz skryptu, który pomoże ci sprawdzić składnię? Czy uruchamiasz skrypt i potrzebujesz pomocy w zrozumieniu konkretnego błędu? –

+5

Myślę, że chcą sprawdzić, czy plik ma poprawną składnię mySql. –

+0

wizualne sprawdzenie pliku SQL lub skryptu również sprawdzi składnię: – maxjackie

Odpowiedz

2

Można go wkleić do przeglądarki zapytań, takiej jak Przeglądarka zapytań MySQL (część pakietu narzędzi GUI) i wizualnie sprawdzić, jak słowa kluczowe i literały łańcuchowe są kolorowe, aby łatwiej było zobaczyć, czy popełniono błędy składniowe.

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

2

wystarczy go uruchomić ....

rozpocząć transakcję

uruchomić go

wycofywania

+0

uruchomienie go da odpowiedź, ale czy jest coś, co pokazuje mi błędy składni w tym pliku .... – maxjackie

+0

możesz mieć prawidłową składnię i nadal mieć błędy runtime –

+10

Nie można wycofać, jeśli tabele są MyISAM, lub jeśli skrypt wykonuje instrukcje niejawne-commit (np. DDL) lub jeśli skrypt zawiera instrukcje COMMIT. –

2

Istnieje kilka produktów za darmo/try-ware, które obecnie nie pozwolisz połączyć się z bazą danych MySQL lub po prostu wkleić skrypt do sprawdzenia poprawności. Google jest tu twoim przyjacielem. Mimer will check ANSI-Standard syntax validation, ale prawdopodobnie nie obsługuje żadnych szczegółów MySQL.

1

Istnieje kilka możliwości. Jeśli używasz tabel InnoDB obsługujących transakcje, możesz po prostu wykonać na początku pliku .sql i rollback; koniec. MySQL wyświetli błędy składniowe.

Jeśli testiing UPDATE lub DELETE wypowiedzi, można dodać LIMIT 0 do końca, aby uniknąć tych zapytań od dokonywania jakichkolwiek zmian w bazie danych, i jeszcze MySQL sprawdzić składnię.

+2

Skrypt może zawierać instrukcje, które i tak powodują niejawne zatwierdzenie. –

+0

To prawda, że ​​niektóre założenia dotyczące zawartości pliku .sql. –

3

Podstawowy lekser wydaje się być zaimplementowany w sql/sql_lex.cc. Możesz użyć/uratować to, aby zbudować własny testowy parser. Ale to tylko sprawdziłoby składnię, ale nie błędów w czasie wykonywania.

+1

Ten rodzaj programowego rozwiązania może być przydatny na przykład do sprawdzenia, czy wynik mysqldump jest co najmniej syntaktycznie kompletny. – ClearCrescendo

1

TLDR:

>awk '{print "EXPLAIN " $0}' statements.sql | mysql --force -u user -p database | grep "ERROR" 

dziwne, mysql nie posiada wbudowany przełącznik do tego, ale można sprawdzić składnię dodając oświadczenie EXPLAIN przed twoje pytania.

Jeśli masz plik statements.sql z każdym oświadczeniu na jednej linii, prepend EXPLAIN przed wszystkimi liniami z:

>awk '{print "EXPLAIN " $0}' statements.sql > check.sql 

Następnie można uruchomić sprawozdania z narzędzia mysql wiersza polecenia i używać --force do niech błąd będzie kontynuowany. Wypisze komunikat o błędzie w przypadku jakichkolwiek instrukcji o niepoprawnej składni.

>mysql --force -u user -p database < check.sql 

Albo tylko zobaczyć linie z błędami:

>mysql --force -u user -p database < check.sql | grep "ERROR" 

Można to wszystko zrobić w jednym wierszu bez tworzenia pliku pośrednimi:

>awk '{print "EXPLAIN " $0}' statements.sql | mysql --force -u user -p database | grep "ERROR" 
+0

Dodałbym to, aby plik nie musiał być pojedynczą linią. 'awk '{if (sub (/; $ /;;; \ n")) printf "EXPLAIN% s", 0 USD; else wydrukuj $ 0} 'commands.sql' Połącz linie kończące się średnikiem. – Jon49

Powiązane problemy