2016-06-28 18 views
5

tôi có một loạt các kịch bản để tạo một lược đồ, với một lời nhận xét như sau trước mỗi lệnh:Mysql Lỗi 1064 ("Bạn có một lỗi trong cú pháp SQL của bạn") gây ra bởi SQL bình luận

-------------------------------------------------------- 
-- Table TABLE_NAME 
-------------------------------------------------------- 

khi tôi thực thi kịch bản từ mysql trên dòng lệnh, tôi nhận được một loạt các lỗi như sau:

ERROR 1064 (42000): 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 '------------------------------------------------------ 
------------------------' at line 1 

(trên thực tế, tôi nhận được một lỗi cho mỗi bình luận, mặc dù được thông báo luôn đề cập đến dòng 1).

Để giải quyết nhanh vấn đề của tôi, tôi đã xóa các nhận xét và tập lệnh chạy mà không gặp sự cố, nhưng tôi đã rất ngạc nhiên khi thấy hành vi đó và không thể tìm thấy câu hỏi có liên quan ở đây trên stackoverflow. Có ai có một lời giải thích? Có ai từng quan sát hành vi kỳ quặc như vậy không?

Tôi đang chạy mysql 5.6.30, mặc định là 5.6 trên ubuntu tại thời điểm này.

Trả lời

8

Từ MySQL Manual:

Từ một “-” chuỗi đến cuối dòng. Trong MySQL, “-” (double-dash) bình luận phong cách đòi hỏi các dấu gạch ngang thứ hai để được theo sau bởi ít nhất một khoảng trắng hoặc điều khiển nhân vật (chẳng hạn như một không gian, tab, xuống dòng, và vân vân). Cú pháp này hơi khác với cú pháp bình luận SQL tiêu chuẩn , như được thảo luận trong Phần 1.8.2.4, “'-' như là bắt đầu của một chú thích”.

(tôi nhấn mạnh)

tl; DR bạn -- chỉ ra một lời nhận xét phải được theo sau bởi ít nhất một ký tự khoảng trắng hoặc kiểm soát.

Cố định mã của bạn:

-- ----------------------------------------------------- 
-- Table TABLE_NAME 
-- ----------------------------------------------------- 

Trong MySQL Bạn cũng có thể sử dụng cú pháp sau:

/* 
* Table TABLE_NAME 
*/ 

Hoặc ngay cả điều này:

# ----------------------------------------------------- 
# Table TABLE_NAME 
# ----------------------------------------------------- 
+0

Và, không giống như cú pháp Oracle, MySql cho phép nhận xét '/ * theo kiểu này * /' cũng như '- theo kiểu này'. –

+0

@OllieJones Ngay cả '# theo kiểu này': D – Magisch

+0

Tôi chấp nhận câu trả lời này là câu trả lời hoàn chỉnh nhất. Tôi được sử dụng để dòng đầy đủ các dấu gạch ngang được hiểu là ý kiến ​​trong SQL, vì vậy tôi đã ngạc nhiên khi thấy rằng họ đã nêu ra lỗi. Tôi sẽ thông báo cho các nhà cung cấp phần mềm tôi đang cài đặt rằng nội dung của phần mềm "mysql" của họ thực sự không tuân thủ MySQL :) –

3

Bạn cần một khoảng trống sau hai dấu gạch ngang để biểu thị nhận xét. Nếu không có nó nó chỉ là một chuỗi:

-- ------------------------------------------------------ 
-- Table TABLE_NAME 
-- ------------------------------------------------------ 
0

Từ: http://dev.mysql.com/doc/refman/5.7/en/comments.html Không gian sau dấu gạch ngang kép tức là "-" là một phần của nhận dạng nhận xét ication! Lý do đằng sau quyết định MySQL: là đây http://dev.mysql.com/doc/refman/5.7/en/comments.html

Không gian là cần thiết để ngăn chặn vấn đề với tự động tạo ra truy vấn SQL mà sử dụng cấu trúc như sau đây, nơi chúng tôi tự động chèn giá trị thanh toán để thanh toán:

UPDATE account SET credit=credit-payment 
UPDATE account SET credit=credit--1 
1

Cá nhân, tôi chỉ sử dụng hai dấu gạch ngang -- khi nhận xét một dòng. Khi làm việc với các nhận xét chặn, tôi có xu hướng sử dụng định dạng sau:

/** 
* Table TABLE_NAME 
* 
*/ 
Các vấn đề liên quan