2009-08-26 10 views
-1
mysql -u username -p database -e deletedata.sql 

Ich bekomme Fehler 1064 (42000) bei Zeile 1: Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe verwenden ‚deletedata.sql‘ at line 1MySQL Fehler 1064, nicht sicher, was ich hier falsch mache

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

Was könnte ich fehle?

+0

Ich habe beide Lösungen ausprobiert und die gleichen Fehler bekommen ... verblüffend! –

+0

Kannst du eine "describe 'table1'" von der MySQL-Konsole aus machen und dein Tabellenschema hier einfügen (oder zumindest die relevanten Felder), damit wir direkt mit dem arbeiten können, was du hast? –

Antwort

0

-e führt eine Anweisung aus, keine SQL-Datei. Was Sie brauchen:

mysql -u user -p pass db 

und dann in die mysql cli:

\. deletedata.sql 

Aufkantung Punkt bedeutet "Quelldatei"

oder Sie können nur eine Pipe:

cat delete.sql | mysql -u user -p pass db 
+0

Danke ... das letzte denken, dass Sie versucht haben zu arbeiten, so ging ich zurück und schaute auf meine Syntax und überprüfte das Handbuch für mysql. Das hat bei mir funktioniert: mysql --user = benutzername --password = dein_passwort db_name> deletesql.sql Jetzt eine letzte Frage ... es gibt keine Ausgabe ... gibt es eine Möglichkeit, diese wortreich zu machen, damit ich bekommen kann eine Bestätigung, dass es meine Daten gelöscht hat? Vielen Dank. –

+0

Nevermind ... Ich denke, ich sollte zuerst RTFM haben, bevor ich poste. --verbose ist das Flag, das der Befehlszeile hinzugefügt wird. –

1

Einfache Anführungszeichen in MySQL bezeichnen Stringkonstanten. Sie sollten back quotes (`) verwenden, um Tabellen-/Spaltennamen (oder Bezeichner im Allgemeinen) zu umgehen.

+0

Das hat nicht funktioniert ... –

+0

Was speziell nicht funktioniert? 'DELETE FROM \' table1 \ 'WHERE \' column \ '<= date_sub (aktuelles_datum, INTERVALL 37 Tag);' sollte gut funktionieren. Erhalten Sie den gleichen Fehler wie oben? – ChssPly76

+0

Ja, es ist der gleiche Fehler wie oben. –

0

Ich kann mir vorstellen, dass Sie wahrscheinlich Probleme mit der Verwendung von Tabellenbezeichnern in der FROM-Klausel bekommen. Ich habe ein paar Beispiele aus einer meiner Datenbanken gestohlen. So wird dies fehlschlagen:

Das ist wirklich seltsam, weil nur "DELETE" mit "SELECT *" ersetzen funktioniert.

Aber das wird funktionieren:

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); 

syntaktische Seltsamkeiten. Spaß! : D

+0

Dies hat nicht funktioniert ... –