Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để kiểm tra các câu lệnh SQL (của Tôi) về tính đúng cú pháp

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:

ERROR 1146 (42S02) at line 1: Table 'mysql_test.s' doesn't exist

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:

#!/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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể kết nối với MySQL thông qua tập lệnh PHP khi sử dụng mysqli hoặc PDO NHƯNG mysql hoạt động

  2. không thể lưu dữ liệu từ 1 bảng sang bảng khác

  3. MySQL MOD () Hàm - Thực hiện một hoạt động Modulo trong MySQL

  4. Cách hoạt động của hàm MID () trong MySQL

  5. Chuyển đổi truy vấn lớn