2016-06-28 7 views
5

У меня есть ряд сценариев для создания схемы, с комментарием, как следующее перед каждой инструкции:Mysql Error 1064 («У вас есть ошибка в вашем SQL синтаксиса»), запускаемый по SQL комментарии

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

Когда я выполнить сценарий из MySQL в командной строке, я получаю кучу ошибок, как следующее:

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 

(на самом деле, я получаю одну ошибку для каждого комментария, несмотря на сообщения всегда ссылаясь на линии 1).

Чтобы быстро решить мою проблему, я просто удалил комментарии и скрипт работал без проблем, но я был удивлен, увидев такое поведение и не смог найти соответствующий вопрос здесь, в stackoverflow. У кого-нибудь есть объяснение? Кто-нибудь когда-либо наблюдал такое странное поведение?

Я запускаю mysql 5.6.30, по умолчанию для 5.6 на ubuntu в это время.

ответ

8

Из MySQL Manual:

С «-» последовательность до конца строки. В MySQL, то «-» (двойной тир) комментарий стиль требует второго тира следовать по крайней мере один пробел или управляющего символом (например, пробел, табуляция, перевод строки и т.д.). Этот синтаксис немного отличается от стандартного синтаксиса комментария SQL , как обсуждалось в разделе 1.8.2.4, «« - »как начало Комментарий».

(курсив мой)

TL; DR Ваш -- указывает на комментарий должен следовать по меньшей мере, одного пробела или управляющего символа.

Исправлен код твоего:

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

В MySQL Вы можете также использовать этот синтаксис:

/* 
* Table TABLE_NAME 
*/ 

Или даже так:

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

И, в отличие от синтаксиса Oracle, MySql позволяет комментарии '/ * в этом стиле * /', а также '- в этом style'. –

+0

@OllieJones Даже '# в этом стиле': D – Magisch

+0

Я принял этот ответ как самый полный. Я использую полные строки тире, интерпретируемые как комментарии в SQL, поэтому я был удивлен, увидев, что они вызвали ошибки. Я проинформирую поставщиков программного обеспечения, которое я устанавливаю, что содержание их программного обеспечения «mysql» на самом деле не совместимо с MySQL :) –

3

Чтобы указать комментарий, вам понадобится пробел после двух тире. Без него это просто строка:

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

От: http://dev.mysql.com/doc/refman/5.7/en/comments.html Пространство после двойной тире, т. е. «-» является частью идентификатора комментария ication! Обоснование за решением MySQL: здесь http://dev.mysql.com/doc/refman/5.7/en/comments.html

Пространство необходимо, чтобы избежать проблем с автоматически сгенерированных запросов SQL, которые используют конструкции, такие как следующие, где мы автоматически вставить значение оплаты платежа:

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

Лично я использую только две черточки --, комментируя одну строку. При работе с блочными комментариями, я предпочитаю использовать следующий формат:

/** 
* Table TABLE_NAME 
* 
*/