-1
mysql -u username -p database -e deletedata.sql

1行目でエラー1064(42000)が発生します。SQL構文にエラーがあります。1行目の「deletedata.sql」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

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

何が欠けている可能性がありますか?

4

3 に答える 3

1

MySQLの一重引用符は、文字列定数を示します。テーブル/列名(または一般的な識別子)をエスケープするには、バッククォート( `)を使用する必要があります。

于 2009-08-26T19:40:07.537 に答える
0

-eは、SQLファイルではなくステートメントを実行します。何が必要:

mysql -u user -p pass db

次に、mysqlcliに移動します。

\. deletedata.sql

バックスラッシュドットは「ソースファイル」を意味します

または、単にパイプすることができます:

cat delete.sql | mysql -u user -p pass db
于 2009-08-26T20:33:44.903 に答える
0

FROM 句でテーブル識別子を使用すると、おそらく問題が発生するのではないかと思います。データベースの 1 つからいくつかの例を盗みました。したがって、これは失敗します:

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

「DELETE」を「SELECT *」に置き換えるだけで機能するため、これは本当に奇妙です。

しかし、これはうまくいきます:

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

于 2009-08-26T19:49:00.983 に答える