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

Je reçois erreur 1064 (42000) à la ligne 1: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près « deletedata.sql » à la ligne 1Erreur MySQL 1064, je ne sais pas ce que je fais mal ici

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

Que pouvais-je manque?

+0

J'ai essayé les deux solutions et j'ai eu les mêmes erreurs ... perplexes! –

+0

Pouvez-vous faire un "describe 'table1'" depuis la console MySQL et coller votre schéma de table ici (ou au moins les champs concernés) afin que nous puissions travailler directement avec ce que vous avez? –

Répondre

0

-e exécute une instruction, pas un fichier SQL. Qu'est-ce que vous avez besoin:

mysql -u user -p pass db 

puis dans le mysql cli:

\. deletedata.sql 

point Backslash signifie "fichier source"

Ou vous pouvez simplement redirigez:

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

Merci ... le dernier pense que vous avez dit d'essayer travaillé donc je suis retourné et regardé ma syntaxe et vérifié le manuel pour mysql. Cela a fonctionné pour moi: mysql --user = nom_utilisateur --password = votre_mot_de_passe nom_base> deletesql.sql Maintenant une dernière question ... il n'y a pas de sortie ... est-il possible de faire ce verbeux afin que je puisse obtenir une confirmation qu'il a supprimé mes données? Merci. –

+0

Nevermind ... Je suppose que je devrais avoir RTFM avant de poster. --verbose est le drapeau à ajouter à la ligne de commande. –

1

Les guillemets simples dans MySQL indiquent des constantes de chaîne. Vous devriez utiliser des guillemets arrière (`) pour échapper les noms de table/colonne (ou les identifiants en général).

+0

Cela n'a pas fonctionné ... –

+0

Qu'est-ce qui spécifiquement n'a pas fonctionné? 'DELETE FROM \' table1 \ 'WHERE \' colonne \ '<= date_sub (date_en_courant, INTERVAL 37 jour);' devrait fonctionner correctement. Avez-vous la même erreur que ci-dessus? – ChssPly76

+0

Oui, c'est la même erreur que ci-dessus. –

0

J'imagine que vous avez probablement des problèmes avec l'utilisation des identificateurs de table dans la clause FROM. J'ai volé quelques exemples d'une de mes bases de données. Donc, cela ne fonctionne pas:

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

Ce qui est vraiment étrange parce que remplacer « SUPPR » avec « SELECT * » fonctionne.

Mais cela fonctionnera bien:

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

bizarreries Syntactic. Amusement! : -D

+0

Cela n'a pas fonctionné ... –

Questions connexes