MySQL error 1064, не уверен, что я здесь не так делаю - PullRequest
0 голосов
/ 26 августа 2009
mysql -u username -p database -e deletedata.sql

Я получаю ОШИБКУ 1064 (42000) в строке 1: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с «deleata.sql» в строке 1

DELETE FROM 'table1' WHERE 'column' <= date_sub(current_date, INTERVAL 37 day);
DELETE FROM 'table2' WHERE 'column' <= date_sub(current_date, INTERVAL 37 day);

Чего мне не хватать?

Ответы [ 3 ]

1 голос
/ 26 августа 2009

Одиночные кавычки в MySQL обозначают строковые константы. Вы должны использовать обратные кавычки (`) для экранирования имен таблиц / столбцов (или идентификаторов в целом).

0 голосов
/ 27 августа 2009

-e выполняет оператор, а не файл sql. Что вам нужно:

mysql -u user -p pass db

и затем в mysql cli:

\. deletedata.sql

Точка с обратной косой чертой означает «исходный файл»

Или вы можете просто передать это:

cat delete.sql | mysql -u user -p pass db
0 голосов
/ 26 августа 2009

Я предполагаю, что у вас, вероятно, возникают проблемы с использованием идентификаторов таблиц в предложении FROM. Я украл несколько примеров из одной из моих баз данных. Так что это не удастся:

DELETE FROM Session s WHERE s.startTime<=date_sub(NOW(),INTERVAL 30 day);

Что действительно странно, потому что простая замена «УДАЛИТЬ» на «ВЫБОР *» работает.

Но это будет хорошо работать:

DELETE FROM Session WHERE startTime<=date_sub(NOW(),INTERVAL 30 day);
DELETE s FROM Session s WHERE s.startTime<=date_sub(NOW(),INTERVAL 30 day);

Синтаксические странности. Веселье! : -D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...