Sau khi tìm kiếm một công cụ CLI để viết cú pháp trong Mysql để sử dụng trong Jenkins và không tìm thấy gì nhanh chóng (câu hỏi Stackoverflow này là một trong những kết quả đầu tiên - LOL), tôi đã đưa ra giải pháp sau (OS:Linux, nhưng phải khả thi với Windows):
Một cái gì đó giống như follwoing:
lint_result=`mysql mysql_test -B -f -e 'select asdf s where x;' 2>&1`; if [ `echo $lint_result | sed -r "s/ERROR ([0-9]*).*/\1/g"` -eq 1064 ]; then echo -e "Syntax error:\n${lint_result}"; fi
Syntax error:
ERROR 1064 (42000) at line 1: 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 'where x' at line 1
(Để kiểm tra các tệp sql, bạn có thể sử dụng "
Nếu cú pháp của truy vấn không thể được phân tích cú pháp bởi mysql, nó tuyên bố:ERROR 1064 (42000) ở dòng 1:Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần '' tại dòng 1
Chỉ khi cú pháp đúng, nó mới cố gắng thực thi truy vấn và nhận ra rằng bảng không tồn tại nhưng điều này không còn thú vị nữa:
Vì Lỗi 1064 là cú pháp không hợp lệ. Bạn chỉ cần tạo một cơ sở dữ liệu thử nghiệm trống vì nếu không sẽ chỉ xuất hiện lỗi với phần TỪ sai (ở đây, ví dụ:cơ sở dữ liệu này là cần thiết để có được kết quả kiểm tra cú pháp hợp lệ:'select asdf from s where x and if;).
Theo như tôi đã thử nghiệm thì nó hoạt động tốt (Phiên bản Mysql 5.5).
Đây là một vesion tập lệnh bash hoàn chỉnh:ERROR 1146 (42S02) at line 1: Table 'mysql_test.s' doesn't exist
#!/bin/bash
source_dir=${1};
database="mysql_test";
mysql_args="-h127.0.0.1";
mysql $mysql_args -B -e "DROP DATABASE IF EXISTS $database; CREATE DATABASE $database;";
for file in `find $source_dir -name "*.sql"`; do
lint_result=`mysql $mysql_args $database -f -b < $file 2>&1`;
if [ "`echo $lint_result | sed -r \"s/ERROR ([0-9]*).*/\1/g\"`" = "1064" ]; then
echo -e "Syntax error in file ${file}:\n${lint_result}" && exit 1;
fi;
done